这个相同的代码适用于MVC 2,但不适用于MVC 3 Razor。加载页面后,不要在Razor中调用HTMLHelper加载菜单,如下所示。
用于测试的硬编码菜单,不在页面上输出。
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using myproject.Extensions;
public static class MenuHelper
{
public static string TabbedMenu(this HtmlHelper helper, IEnumerable<MenuTab> tabs)
{
//I have hard coded menu for testing purpose.
return "<div class='menu-image'><img src='/content/Images/common/on-left.gif' alt='' /></div><div class='on'><a class='over' href='/?Length=4'>Home</a></div><div class='menu-image'><img src='/content/Images/common/on-right.gif' alt='' /></div><a href='/Home/About'>About</a><a href='/Home/Contact'>Contact</a>";
}
}
以下是Razor CSHTML代码。
@{Html.TabbedMenu
(
new List<MenuTab>
{
MenuTab.Create("Home", "Index", "Home"),
MenuTab.Create("About", "About", "Home"),
MenuTab.Create("Contact", "Contact", "Home")
}
);}
答案 0 :(得分:5)
在@{ ... }
中包装代码(与您一样)是Razor相当于<% ... %>
(没有=
)。
因此,您的代码会调用该函数,但不会对结果执行任何操作。
您应该删除{}
和;
,然后只需撰写@Html.TabbedMenu(...)
;这相当于<%: Html.TabbedMenu(...) %>
。
您还需要更改方法以返回HtmlString
,以防止Razor转义HTML。