Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在多个视图中共享MVC Razor函数_C#_Asp.net Mvc_View_Razor - Fatal编程技术网

C# 在多个视图中共享MVC Razor函数

C# 在多个视图中共享MVC Razor函数,c#,asp.net-mvc,view,razor,C#,Asp.net Mvc,View,Razor,我的视图中有几个页面共享的函数: @functions { public HtmlString ModeImage(ModeEnum mode) { switch(mode) { case AMode: new HtmlString("<img etc..."); break; // more etc... } } } @函数 { 公共HtmlString Mode

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

@functions 
{
    public HtmlString ModeImage(ModeEnum mode) 
    {
        switch(mode)
        {
            case AMode: new HtmlString("<img etc..."); break;
            // more etc...
        }
    }
}
@函数
{
公共HtmlString ModeImage(MODENUM模式)
{
开关(模式)
{
case-AMode:new-HtmlString(“您可以创建一个函数,并在页面中放置一个普通的
静态方法。

然后,您可以通过在任何地方编写
PageName.MyMethod()
来调用它,我相信您不需要重新编译该项目。

这听起来像是您想要Scott Guthrie博客文章中描述的Razor@helper方法

这里是概述。。。 “Razor中的@helper语法使您能够轻松创建可重用的helper方法,这些方法可以将输出功能封装在视图模板中。它们可以更好地重用代码,还可以促进更可读的代码。”

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

如果MVC项目根目录中不存在名为
App\u code
的文件夹,请在此处创建一个空的razor视图,并根据需要命名:

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

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

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

重新编译有什么问题?把这个函数放在布局中怎么样view@Miro:这不起作用。页面不会从其布局页面继承任何内容。毕竟,
layout
是在运行时设置的。请查看是否确实需要在多个不同的视图上重复使用同一函数。看起来他并不需要帮助器(他正在返回void)抱歉,这是一种帮助器方法,它根据枚举返回图像html。我觉得它对于部分来说太小了,如果我说,更改图标名称,我不希望重新编译代码。这看起来像我正在寻找的。要先尝试一下。这很完美。=)我不知道这个存在。非常感谢。这很有用,但是助手有一些限制,比如缺少泛型,你仍然可以在多个视图中重用静态方法。这太棒了。你能在一个区域中做同样的事情吗?基本上,不是在整个代码库中共享,而是在一个部分中共享吗?@twsmale,我不知道;我不知道以前很少使用的区域。也许你可以为此提出一个新问题。请详细解释助手和函数之间的区别以及使用它们的方式
@Shared.ShowSomething()
@Shared.CalculateSomething()