select right menu on master page in MVC from child page

前端 未结 2 1992
闹比i
闹比i 2020-12-18 09:53

I have a couple of list items in a shared _layout.cshtm file (master page) in my MVC application.

something like:

2条回答
  •  不知归路
    2020-12-18 10:48

    You could write a custom helper method:

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

    and then:

      @Html.MenuItem("Home", "home", "home") @Html.MenuItem("About", "about", "home") @Html.MenuItem("Contact", "contact", "home") @Html.MenuItem("Blog", "blog", "home")

    The helper check the current action and controller and if they match the one passed as arguments to the helper it appends the selected CSS class to the li.

提交回复
热议问题