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

kai*_*oon 32 c# asp.net-mvc view razor

我的视图中有多个页面共享的函数:

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

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

Sam*_*Sam 36

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

创建一个App_Code在MVC项目根目录中调用的文件夹(如果该文件夹尚不存在).在这里,创建一个空的剃刀视图,并将其命名为您想要的任何内容:

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

根据需要添加@helpers和/或static方法:

@helper ShowSomething()
{
    <span>Something</span>
}

@functions
{
    public static int CalculateSomething()
    {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

@Shared.ShowSomething()
@Shared.CalculateSomething()
Run Code Online (Sandbox Code Playgroud)

  • 现在,我们不能像这样共享 dotnet core `.net6` 中的函数 (3认同)

Pai*_*ook 20

这听起来像你想要博客文章ASP.NET MVC3中描述的Razor @helper方法 Scott Guthrie 在Razor中的@helper语法.

以下是概述...... "Razor中的@helper语法使您能够轻松创建可重用的辅助方法,这些方法可以在视图模板中封装输出功能.它们可以实现更好的代码重用,并且还可以促进更易读的代码."