重定向视图不在MVC应用程序中显示“活动”属性

时间:2015-05-20 22:10:24

标签: javascript c# asp.net-mvc-4 razor

我正在玩一个新的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>

2 个答案:

答案 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