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()