代码之家  ›  专栏  ›  技术社区  ›  Hemant

在ASP.NET MVC中确定局部视图中当前视图的名称

  •  4
  • Hemant  · 技术社区  · 15 年前

    我在测试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";
    

    这是可行的,但我必须修改每个控制器操作。是否有更好的方法自动检测视图,并以某种方式更改局部视图代码以相应地更改颜色。

    1 回复  |  直到 15 年前
        1
  •  8
  •   Community Jaime Torres    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>