我正在玩一个新的MVC 4应用程序。基本上,顶部有一些菜单项,当前活动页面使用我_Layout.cshtml
中的跟踪JavaScript突出显示:
<script type="text/javascript">
$(document).ready(function () {
$('#top-navbar .nav a[href="' + this.location.pathname + '"]').parent().addClass('active');
});
</script>
通过顶部菜单导航时效果很好。但是,我正在添加“登录”功能,如果用户在登录后尝试返回登录页面,则只会向Index
视图发送而不是Login
视图。问题是,CSS仍然突出显示菜单中的Login
按钮,而不是Home
按钮。
我通过Session
状态保留用户的登录信息。以下是Login()
ActionResult
:
[HttpGet]
public ActionResult Login()
{
if (Session["ContactName"] != null)
{
return View("Index");
}
else
{
return View();
}
}
正如您所看到的,如果ContactName
不是null
,那么他们已经登录,因此会向他们发送Home
视图。我应该Redirect()
代替主页吗?
此外,如果需要,此处为菜单navbar
:
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About Us", "About", "Home")</li>
<li>@Html.ActionLink("Customer Login", "Login", "Home")</li>
</ul>
答案 0 :(得分:2)
您可以删除JQuery以设置活动菜单,并在导航栏标记中使用它:
<ul class="nav navbar-nav">
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Index" ? "active" : "")">@Html.ActionLink("Home", "Index", "Home")</li>
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "About" ? "active" : "")">@Html.ActionLink("About", "About", "Home")</li>
<li class="@(ViewContext.RouteData.Values["Action"].ToString() == "Contact" ? "active" : "")">@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
或者你可以实现一些HtmlHelper来做同样的事情,就像这篇文章中显示的那样: http://chrisondotnet.com/2012/08/setting-active-link-twitter-bootstrap-navbar-aspnet-mvc/
答案 1 :(得分:2)
问题是您的客户端仍然将URL视为for(int i = 0; i < array.length; i++){
而不是索引,因此您最好不要重定向用户。您可以使用RedirectToAction
控制器方法执行此操作,并为其提供返回索引视图的控制器和操作名称:
/Login