2009-07-17 37 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

相关问题