在我元素的菜单栏中,当单击某个菜单时,我将其类设置为事件。这是通过以下代码完成的
public static class MenuExtensions
{
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("active");
}
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
return MvcHtmlString.Create(li.ToString());
}
}
这就是我创建菜单栏的方式
<ul class="nav-pills">
//<li> tags class is set to active when clicked
<li>@Html.MenuItem("Account","Details","Account")</li>
<li>@Html.MenuItem("Contacts","Index","AddressBook")</li>
<li>@Html.MenuItem("SomeMenu","Index","Appointment")</li>
<li>@Html.MenuItem("Hello "+User.Identity.Name+"!","Manage","Account")</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
这里是单击Account
菜单时menubar 的外观示例
现在,当我单击编辑按钮时,橙色条是帐户菜单消失(事件类已从菜单项中删除)。这不方便,因为用户仍在帐户部分。
是否可以将菜单的类设置为事件直到单击另一个菜单? 或者 直到页面属于某个 Controller ?
例如,将菜单项的类设置为事件状态,直到用户停留在帐户 Controller (在这种情况下)
最佳答案
删除这部分
string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase)
来自
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
li.AddCssClass("active");
}
成功了。
如果你有两个指向同一个 Controller 的菜单项,它将无法工作,在这种情况下,两个菜单项都将用 active 类包装
关于javascript - 将导航栏菜单类设置为事件状态,直到单击另一个菜单或直到用户停留在某个 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22807228/