如何在mvc4中使用url显示活动选项卡

时间:2017-03-08 09:17:46

标签: css css3 asp.net-mvc-4

 public class MenuItem
{
    public MenuItem(string area, string controller, string action,string name)
    {
        this.area = area;
        this.controller = controller;
        this.action = action;
        this.name = name;
    }
    public string area { get; set; }
    public string controller { get; set; }
    public string action { get; set; }
    public string name { get; set; }
}

〜Layout.cshtml

 @Html.Action("_Menu", "User") //loading partial page

控制器

  [ChildActionOnly]
    public ActionResult _Menu()
    {

        List<MenuItem> obj = new List<MenuItem>();
        obj.Add(new MenuItem("Master", "User", "ViewProfile", "Profile"));
        obj.Add(new MenuItem("Master", "User", "StepI", "Upload Abstract"));
        obj.Add(new MenuItem("Master", "User", "ChangePass", "Change Password"));
        obj.Add(new MenuItem("", "home", "login", "Log Out"));           
        return PartialView(obj);
    } 

_Menu.cshtml

@model IEnumerable<Conference_Project.Areas.Master.Models.MenuItem>
@foreach (var item in Model)
 {
     <ul class="nav nav-pills nav-stacked">
     <li role="presentation" class="@(ViewContext.RouteData.Values["Action"].ToString().ToLower() == item.action.ToLower() ? "active" : "")">@Html.ActionLink(item.name, item.action, item.controller)</li>
   </ul>
 }

enter image description here

how to show active tab using url in mvc4 

............................................... .. ................................................ ...............................

1 个答案:

答案 0 :(得分:1)

您致电ChildAction以生成部分内容(使用@Html.Action()),所以

ViewContext.RouteData.Values["Action"].ToString()

返回"_Menu"(不是主视图的操作名称)。更改您的代码以使用

ViewContext.ParentActionViewContext.RouteData.Values["Action"].ToString()

以便您获得父动作。

作为旁注,你应该生成一个<ul>元素,我建议比较忽略大小写的值。

@model IEnumerable<Conference_Project.Areas.Master.Models.MenuItem>
@{
    string action = ViewContext.ParentActionViewContext.RouteData.Values["Action"].ToString().ToLower();
}
<ul class="nav nav-pills nav-stacked">
    @foreach (var item in Model)
    {
        <li role="presentation" class="@(action == item.action.ToLower() ? "active" : "")">
            @Html.ActionLink(item.name, item.action, item.controller)
        </li>
    }
</ul>