从子页面选择MVC中母版页上的右侧菜单

Loc*_*rde 4 asp.net-mvc razor asp.net-mvc-3

_layout.cshtm我的MVC应用程序中的共享文件(母版页)中有几个列表项.

就像是:

<ul>
    <li>Home</li>
    <li>about</li>
    <li>contact</li>
    <li>blog</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

当用户在主页中时,我希望家居li项目有课程selected,如下所示:

<li class="selected">Home</li>
Run Code Online (Sandbox Code Playgroud)

等等.做这个的最好方式是什么?

在常规的asp.net网站上,我曾经在母版页中有一个方法,并从子页面调用该方法,但在MVC中,我不知道该怎么做.

谢谢.

Dar*_*rov 11

您可以编写自定义帮助方法:

public static MvcHtmlString MenuItem(
    this HtmlHelper htmlHelper, 
    string text,
    string action, 
    string controller
)
{
    var li = new TagBuilder("li");
    var routeData = htmlHelper.ViewContext.RouteData;
    var currentAction = routeData.GetRequiredString("action");
    var currentController = routeData.GetRequiredString("controller");
    if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
        string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
    {
        li.AddCssClass("selected");
    }
    li.SetInnerText(text);
    return MvcHtmlString.Create(li.ToString());
}
Run Code Online (Sandbox Code Playgroud)

然后:

<ul>
    @Html.MenuItem("Home", "home", "home")
    @Html.MenuItem("About", "about", "home")
    @Html.MenuItem("Contact", "contact", "home")
    @Html.MenuItem("Blog", "blog", "home")
</ul>
Run Code Online (Sandbox Code Playgroud)

帮助程序检查当前操作和控制器,如果它们与作为参数传递给助手的那个匹配,它将selectedCSS类附加到li.