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