【问题标题】:Determining the name of current view within a partial view in ASP.NET MVC在 ASP.NET MVC 的局部视图中确定当前视图的名称
【发布时间】:2009-07-17 17:21:37
【问题描述】:

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

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

【问题讨论】:

    标签: c# asp.net-mvc css partial-views


    【解决方案1】:

    我认为您不需要 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>
    

    【讨论】:

    • 这对我帮助很大。谢谢。作为一个参考,我正在使用这个邪恶来获取这个信息: String currentView = ((WebFormView)ViewContext.View).ViewPath;我的问题是,由于未知的原因,它在一个 Viewcontrol 中工作,但不是另一个,并且两者都加载在同一页面上。这可能是我的 ID10T 错误,但问题的原因并不是很明显。再次感谢。
    猜你喜欢
    • 2010-11-19
    • 2010-12-02
    • 2011-09-12
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多