Shared MVC Razor functions in several views

爱⌒轻易说出口 提交于 2019-12-20 09:48:10

问题


I have functions in my view that is shared by several pages:

@functions 
{
    public HtmlString ModeImage(ModeEnum mode) 
    {
        switch(mode)
        {
            case AMode: new HtmlString("<img etc..."); break;
            // more etc...
        }
    }
}

Is there a way to have it in a separate file and include it on each page without having to copy and paste it in to each one. I know I can write a .cs file and access it per page, but the function really concerns the view and I'de hate to have to recompile if this function changes.


回答1:


This sounds like you want the Razor @helper methods described in the blog post ASP.NET MVC3 and the @helper syntax within Razor by Scott Guthrie.

Here is the overview... "The @helper syntax within Razor enables you to easily create re-usable helper methods that can encapsulate output functionality within your view templates. They enable better code reuse, and can also facilitate more readable code."




回答2:


(Here's a more detailed version of the existing answers.)

Create a folder called App_Code in the root of the MVC project if it doesn't already exist. In here, create an empty razor view and name it whatever you want:

Add @helpers and/or static methods to it as needed:

@helper ShowSomething()
{
    <span>Something</span>
}

@functions
{
    public static int CalculateSomething()
    {
        return 1;
    }
}

Then use them from your views by first accessing the shared view by name:

@Shared.ShowSomething()
@Shared.CalculateSomething()



回答3:


You could make a static helper page and put a normal static method in the page.
You could then call it by writing PageName.MyMethod() anywhere, and I believe that you won't need to recompile the project.



来源:https://stackoverflow.com/questions/6347447/shared-mvc-razor-functions-in-several-views

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!