共享MVC Razor在多个视图中起作用

时间:2011-06-14 17:18:17

标签: c# asp.net-mvc view razor

我的视图中有多个页面共享的功能:

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

有没有办法将它放在一个单独的文件中,并将其包含在每个页面上,而无需将其复制并粘贴到每个页面中。我知道我可以编写.cs文件并在每页访问它,但该函数确实涉及视图,如果此函数发生更改,我不想重新编译。

3 个答案:

答案 0 :(得分:33)

(这是现有答案的更详细版本。)

如果MVC项目的根目录尚未存在,则在MVC项目的根目录中创建一个名为App_Code的文件夹。在这里,创建一个空的剃刀视图,并将其命名为:

MVC project with Razor view called Shared.cshtml inside App_Code folder

根据需要为其添加@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()来调用它,我相信你不需要重新编译项目。