2016-06-11 41 views
0

我正在使用一个mvc 4应用程序,其中我使用了引导类。现在我使用了一个html助手类来检查是否有任何actionlink菜单在那里被设置为活动类。如何在登录或注册链接点击时使用活动类

现在的问题是与Navbar品牌链接和登录和注册链接。

,因为它是有使用类似下面的代码一些额外的属性,我不能使用相同的HTML辅助类为这些:

@Html.ActionLink("Application name", "Index", "Home", null, new { @class = "navbar-brand" }) 

<li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li> 
<li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li> 

上面的第一环节是头部应该是被激活了。

另一个是登录和注册,点击后应该是活动的。

+0

如果您导航到“Register.cshtml”页面,您是否想添加'class =“active”'来表示第二个链接? –

+0

是的Stephen,我希望当点击登录或注册链接时,菜单链接应该添加活动类。 – Vikash

+0

你可以在'ViewBag'中放置一个值 - 比如'ViewBag.ActiveLink =“registerLink”'(或者'=“loginLink”'),然后使用一些当页面加载时运行的脚本 - '$('#' '@ ViewBag.ActiveLink')。addClass('active');' –

回答

0

我有从互联网上了解哪些是第一我创建了一个@html辅助类,它是象下面这样:

public static MvcHtmlString MenuLink(this HtmlHelper helper,string text, string action, string controller) 
 
     { 
 
      var routeData = helper.ViewContext.RouteData.Values; 
 
      var currentController = routeData["controller"]; 
 
      var currentAction = routeData["action"]; 
 

 
      if (String.Equals(action, currentAction as string, 
 
      StringComparison.OrdinalIgnoreCase) 
 
      && 
 
      String.Equals(controller, currentController as string, 
 
      StringComparison.OrdinalIgnoreCase)) 
 
      { 
 
       return new MvcHtmlString("<li class=\"active\">" + helper.ActionLink(text, action, controller) + "</li>"); 
 
      } 
 
      return new MvcHtmlString("<li>" + helper.ActionLink(text, action, controller) + "</li>"); 
 
     }

然后我叫这个类在我的菜单链接如下图所示:

  • @ Html.MenuLink( “家”, “索引”, “家”)
  • 所以点击这个链接后,它被设置为活动。 谢谢大家帮助我。