2011-03-13 78 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

相關問題