最初我为每个菜单项重复了几行代码,只是对各种菜单项值进行了硬编码,但后来我遇到了帮助者,并告诉我我会试一试。现在 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(string action, string controller) 第 4 行:{ 第 5 行:第 6 行:第 7 行:
@@
现在奇怪的是,注意它是如何在第 7 行“mnuHome.png”而不是 mnucontroller.png 上工作的。然而它说第 5 行是错误的。
我也有一个问题 ~ 在助手中不起作用。IE。~/Content 显示为文字字符串,而不是将其编译为正确的路径,该路径应始终指向应用程序的主文件夹。
以下是我用作参考的链接:
特别是在“Razor 声明式助手”标题下的页面下方不到 1/4。从这里开始。
在此先感谢您的帮助。