类
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>
}
how to show active tab using url in mvc4
............................................... .. ................................................ ...............................
答案 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>