共享MVC Razor在多个视图中起作用
我的视图中有多个页面共享的函数:
@functions { public HtmlString ModeImage(ModeEnum mode) { switch(mode) { case AMode: new HtmlString("<img etc..."); break; // more etc... } } }
有没有办法将它放在一个单独的文件中,并将其包含在每个页面上,而无需将其复制并粘贴到每个页面。 我知道我可以编写.cs文件并在每页访问它,但该函数确实涉及视图,如果此函数发生更改,我不想重新编译。
这听起来像你想要博客发布的ASP.NET MVC3中的Razor @helper方法以及 Scott Guthrie 在Razor中的@helper语法 。
以下是概述…… “Razor中的@helper语法使您可以轻松创建可重用的辅助方法,这些方法可以在视图模板中封装输出function。它们可以实现更好的代码重用,并且还可以促进更易读的代码。”
(这是现有答案的更详细版本。)
如果MVC项目的根目录中尚不存在,则在MVC项目的根目录中创建一个名为App_Code
的文件夹。 在这里,创建一个空的剃刀视图,并将其命名为您想要的任何内容:
根据需要为其添加@helper
和/或static
方法:
@helper ShowSomething() { Something } @functions { public static int CalculateSomething() { return 1; } }
然后,首先按名称访问共享视图,从视图中使用它们:
@Shared.ShowSomething() @Shared.CalculateSomething()
您可以创建一个静态帮助页面并在页面中放置一个普通的static
方法。
然后你可以通过在任何地方编写PageName.MyMethod()
调用它,我相信你不需要重新编译项目。