2009-07-17 34 views
4

我在測試ASP.NET MVC應用程序中有一個局部視圖。該視圖負責顯示應用程序菜單按鈕。在ASP.NET MVC中確定部分視圖中當前視圖的名稱

我想更改當前活動頁面的按鈕顏色。目前,我已經寫了類似:

<ul id="menu"> 
    <% var activeClass = (string)(ViewData["currentPage"]) == "Home" ? "activeMenuButton" : ""; %>  
    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li> 

    <% activeClass = (string)(ViewData["currentPage"]) == "About" ? "activeMenuButton" : ""; %>  
    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li> 
</ul> 

,並設置視圖數據控制器操作:

//in home action 
ViewData["currentPage"] = "Home"; 

//in About action 
ViewData["currentPage"] = "About"; 

這工作,但我不得不修改每一個控制器動作。有沒有更好的方法來自動檢測視圖,並以某種方式更改部分視圖代碼以相應地更改顏色。

回答

7

我認爲你不需要ViewData [「currentPage」]。使用ViewContext.RouteData.Values代替:

試試這個:

<ul id="menu"> 
    <% var activeClass = (ViewContext.RouteData.Values["Controller"] == "Home" 
     && ViewContext.RouteData.Values["Action"] == "Home") ? "activeMenuButton" : ""; %> 

    <li><%= Html.ActionLink ("Home", "Index", "Home", new { @class = activeClass })%></li> 

    <% activeClass = (ViewContext.RouteData.Values["Controller"] == "Home" 
     && ViewContext.RouteData.Values["Action"] == "About") ? "activeMenuButton" : ""; %> 

    <li><%= Html.ActionLink ("About", "About", "Home", new { @class = activeClass })%></li> 
</ul> 
+0

這對我幫助很大。謝謝。作爲一個fyi,我使用這段邪惡來得到這個信息:String currentView =((WebFormView)ViewContext.View).ViewPath;我的問題是,由於未知原因,它在一個ViewControl中工作,但不是另一個,並且都在同一頁面上加載。這可能是我的一個ID10T錯誤,但問題的原因並不明顯。再次感謝。 – jason 2010-11-01 17:29:22

相關問題