2011-03-13 75 views
0

我试图让点击标签被选中。我有一个class ='selected',如果我可以通过编程获取值设置,它将正确设置它。我正在使用大多数工作的扩展方法,它是在链接上设置class ='selected'而不是li。如果我能以某种方式设置li class ='selected',那么它将工作。有任何想法吗?如何使用以下代码获取“选定”选项卡?

感谢

<div id="tabs" class="shadetabs">  

    <ul>   
     <li id="tab10" class="test">@Html.MenuLink("Overview", "Index", "Statistics")</li> 
     <li id="tab20" class="test">@Html.MenuLink("Detail View", "Detail", "Statistics")</li> 
     <li id="tab30" class="test">@Html.MenuLink("Trends", "Trends", "Statistics")</li> 
    </ul> 

</div> 


public static class HTMLHelper 
{ 
    public static MvcHtmlString MenuLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName) 
    { 
     var routeData = htmlHelper.ViewContext.RouteData; 
     string currentAction = routeData.GetRequiredString("action"); 
     string currentController = routeData.GetRequiredString("controller"); 

     if (actionName == currentAction && controllerName == currentController) 
     { 

      return htmlHelper.ActionLink(linkText, actionName, controllerName, null, new { @class = "selected" }); 
     } 

     return htmlHelper.ActionLink(linkText, actionName, controllerName); 
    }  
} 
+0

我有一个完美的例子,除非我直到星期一才能访问代码!我会检查回来。 – 2011-03-13 01:28:43

+0

我希望看到另一种方式来做到这一点,所以不胜感激。谢谢。 – KeelRisk 2011-03-13 01:55:58

回答

0

这里是你可以做这件事..

<ul id="menu"> 
    <li id="tab10" class="test @Html.AddClassIfRouteMatches("Home", "Index", "Home", "selected")">@Html.ActionLink("Home", "Index", "Home")</li> 
    <li id="tab20" class="test @Html.AddClassIfRouteMatches("Detail View", "Detail", "Statistics", "selected")">@Html.ActionLink("Detail View", "Detail", "Statistics")</li> 
    <li id="tab30" class="test @Html.AddClassIfRouteMatches("Detail View", "Detail", "Statistics", "selected")">@Html.ActionLink("Trends", "Trends", "Statistics")</li> 
</ul> 



public static string AddClassIfRouteMatches(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, string selectedClassName) 
{ 
    var routeData = htmlHelper.ViewContext.RouteData; 
    string currentAction = routeData.GetRequiredString("action"); 
    string currentController = routeData.GetRequiredString("controller"); 

    if (actionName == currentAction && controllerName == currentController) 
    { 
     return selectedClassName; 
    } 
    return string.Empty; 
} 


而不是呈现任何不同的东西,如果当前路由匹配我们的参数,我们可以使用助手来呈现字符串。这样,您不会失去所有ActionLink覆盖的可用性。

+0

我期待看到一个例子。谢谢! – KeelRisk 2011-03-13 01:18:27

+0

这样做..感谢您的帮助。 – KeelRisk 2011-03-13 01:56:17

相关问题