共享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的文件夹。 在这里,创建一个空的剃刀视图,并将其命名为您想要的任何内容:

带有Razor视图的MVC项目在App_Code文件夹中名为Shared.cshtml

根据需要为其添加@helper和/或static方法:

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

然后,首先按名称访问共享视图,从视图中使用它们:

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

您可以创建一个静态帮助页面并在页面中放置一个普通的static方法。
然后你可以通过在任何地方编写PageName.MyMethod()调用它,我相信你不需要重新编译项目。