2013-01-24 42 views
3

我有一個佈局頁面,它由標準頁眉和頁腳以及RenderBody()函數組成。我的頭由橫跨頂部的大按鈕作爲模塊導航系統更改佈局文件中的類mvc4

Customer Quote Jobs  etc 

我的問題是我希望能夠給這些按鈕上的負載,這取決於被點擊一類的活動狀態。我是否需要在javascript中執行此操作,或者無論如何我都可以將模型數據或一些變量傳遞給佈局文件來設置它?

回答

5

我用下面的函數來實現這一目標:

public static string MarkActive<TModel>(this HtmlHelper<TModel> html,string url) 
{ 
    if (html.ViewContext.HttpContext.Request.Url.LocalPath 
     .ToLower().StartsWith(url.ToLower().Trim())) 
     return "active"; 
    else 
     return null; 
} 

這是一個擴展方法我一直在HtmlExtensions.cs文件。我這樣使用它:

<ul> 
    <li class="@Html.MarkActive("/home")"><a href="/home">Home</a></li> 
    <li class="@Html.MarkActive("/microsite"><a href="/microsite">View Microsite</a></li> 
    <li class="@Html.MarkActive("/settings")"><a href="/settings/">Settings</a></li> 
    <li><a href="/account/logout">Log out</a></li> 
</ul> 

可能有更好的解決方案,但這對我很有用。總之,你應該檢查你的頁面的HttpContext

0

我用下面的辦法來突出選定的菜單項:

<ul class="menu"> 
     @{Dictionary<string, string> menuList = new Dictionary<string, string>() { 
       { "Customer", "Customer" }, 
       { "Quote", "Quote" }, 
       { "Jobs", "Jobs" }, 
       { "etc", "etc" }, 
      }; 
     } 
     @foreach (var item in menuList) 
     { 
      <li @(Request.ServerVariables["SCRIPT_NAME"].Contains(item.Key) ? " class=active" : string.Empty)> 
       <a href="/Home/@item.Key">@item.Value</a></li> 
     } 
    </ul> 

凡item.Key的動作名稱,菜單中的相應名稱item.Value。