2012-05-14 84 views
1

添加CSS類< li >在我_Layout.cshtml文件我有:在控制器方法

<table id="myTable"> 
     <tr><td><ul><li id="id1"><a href="@Url.Action("Index", "Home")">Home</a></li> 
        <li id="id2"><a href="@Url.Action("Index", "About")">About</a></li> 
        <li id="id3"><a href="@Url.Action("Index", "Another")">Another</a></li> 
     </ul></td></tr> 
</table> 

活動鏈接(一個在瀏覽器的URL),應該有CSS類「activeLink」。如何通過控制器中的代碼(而不是客戶端)將css類添加到正確的鏈接? 如何捕獲正確的< li>?我是否需要在所有控制器的Index方法中執行此操作?

回答

4

您可以編寫一個自定義幫助器方法來生成這些菜單項,並檢查當前操作和控制器並應用正確的CSS類。您可以查看following example並根據您的要求進行調整。

就像這樣:

public static class MenuExtensions 
{ 
    public static IHtmlString MenuItem(
     this HtmlHelper htmlHelper, 
     string text, 
     string action, 
     string controller 
    ) 
    { 
     var li = new TagBuilder("li"); 
     var routeData = htmlHelper.ViewContext.RouteData; 
     var currentAction = routeData.GetRequiredString("action"); 
     var currentController = routeData.GetRequiredString("controller"); 
     if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && 
      string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase)) 
     { 
      li.AddCssClass("activeLink"); 
     } 

     li.InnerHtml = htmlHelper.ActionLink(text, action, controller, null, null).ToHtmlString(); 
     return new HtmlString(li.ToString()); 
    } 
} 

,然後在您的視圖:現在

<table id="myTable"> 
    <tr> 
     <td> 
      <ul> 
       @Html.MenuItem("Home", "Index", "Home") 
       @Html.MenuItem("About", "About", "Home") 
       @Html.MenuItem("Another", "Index", "Another") 
      </ul> 
     </td> 
    </tr> 
</table> 

,如果用戶當前瀏覽Home控制器(/Home/About)的About作用,下面的標記會生成:

<table id="myTable"> 
    <tr> 
     <td> 
      <ul> 
       <li><a href="/">Home</a></li> 
       <li class="activeLink"><a href="/Home/About">About</a></li> 
       <li><a href="/Another">Another</a></li> 
      </ul> 
     </td> 
    </tr> 
</table>