MVC帮助程序联机工作,但不在App_Code中工作
本文关键字:工作 App Code 帮助程序 联机 MVC | 更新日期: 2023-09-27 17:58:14
最初我为每个菜单项重复了几行代码,只是对各种菜单项值进行了硬编码,但后来我遇到了助手,并教我要试一试。现在,6行代码(针对每个菜单项)减少为一行代码(对于每个菜单项而言),并且我有一个地方可以更改任何内容,而不是在5个地方进行更改。一切都很棒。这是代码:
@helper MenuItem(string action, string controller)
{
<a href="@Url.Action(action, controller)" id="@controller">
<div class="MenuItem">
<img src="@("/XXX.YYY.Web/Content/Images/Icons/Menu/mnu"+controller+".png")" /><br />
//I had to put the XXX.YYY as a literal string because the ~ didn't work, it was quoted literally also instead of showing the home folder.
@controller
</div>
</a>
}
我的问题是,当我内联使用它时,它是有效的,比如说在我的_Layout.cshtml的顶部,有以下几行代码:
@MenuItem("Index", "Home")
@MenuItem("Index", "Chart")
但是,当我将其删除到App_Code文件夹下一个名为LayoutHelpers.cshtml的通用帮助程序中时,我可以重用它,并相应地更改代码,如下所示:
@LayoutHelpers.MenuItem("Index", "Home")
@LayoutHelpers.MenuItem("Index", "Chart")
注意:实际帮助程序中没有任何更改。只有_Layout.cshtml文件中的上述2行发生了更改。
当我做出这些改变时,我会得到以下错误:
编译错误描述:编译服务此请求所需的资源时出错。请查看以下特定错误的详细信息,并适当地修改源代码。
编译器错误消息:CS0103:名称"Url"在当前上下文中不存在
来源错误:
第3行:@helper MenuItem(字符串操作,字符串控制器)第4行:{第5行:第6行:第7行:@
@
现在奇怪的是,请注意它是如何在第7行"mnuHome.png"上工作的,而不是mnucontroller.png。然而它说第5行有错误。
我还遇到了~不在助手中工作的问题。即~/Content显示为文本字符串,而不是编译到一个正确的路径,该路径应始终指向应用程序的主文件夹。
以下是我用来参考的链接:
http://weblogs.asp.net/jgalloway/archive/2011/03/23/comparing-mvc-3-helpers-using-extension-methods-and-declarative-razor-helper.aspx
具体来说,不到页面下方"Razor Declarative Helpers"标题下的1/4。从现在开始。
提前感谢您的帮助。
Razor内联@helper
中不提供标准帮助程序(如UrlHelper和HtmlHelper)。如果您需要使用它,则需要将UrlHelper作为参数传递给您的助手:
@helper MenuItem(UrlHelper url, string action, string controller)
{
<a href="@url.Action(action, controller)" id="@controller">
<div class="MenuItem">
<img src="@url.Content("~/XXX.YYY.Web/Content/Images/Icons/Menu/mnu"+controller+".png")" />
<br />
@controller
</div>
</a>
}
然后在调用时传递正确的实例:
@LayoutHelpers.MenuItem(Url, "Index", "Home")
@LayoutHelpers.MenuItem(Url, "Index", "Chart")