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.
(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
@helper
s and/orstatic
methods to it as needed:Then use them from your views by first accessing the shared view by name:
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."
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.