我怎样才能在mvc中从视图页面更改布局页面

时间:2012-07-10 07:01:49

标签: c# asp.net-mvc-3 razor

我正在使用razor开发asp.net mvc 3。我的项目中有一个布局(主)页面。它包含一个带有4个链接的侧面板和用于查看的位置(@RenderBody)。当用户点击link1时,它会重定向到viewpage1,并且应该选择link1,当他点击link2时,它会重定向到viewpage2,并且应该选择link2。它很好地重定向到所需的页面,但它总是选择link1,虽然我点击了link2,link3,link4。如何从单个视图页面中选择布局页面中的相应链接。引导我。

1 个答案:

答案 0 :(得分:0)

通过选择我猜你的意思是使用CSS突出显示,不是吗?如果是这种情况,我建议您编写一个自定义HTML帮助程序来生成这些链接:

public static IHtmlString MenuItem(
    this HtmlHelper htmlHelper, 
    string text,
    string action, 
    string controller
)
{
    var li = new TagBuilder("li");
    var routeData = htmlHelper.ViewContext.RouteData;
    var currentAction = routeData.GetRequiredString("action");
    var currentController = routeData.GetRequiredString("controller");
    if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
        string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
    {
        li.AddCssClass("active");
    }
    li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
    return new HtmlString(li.ToString());
}

然后在你的布局中使用帮助器:

<ul>
    @Html.MenuItem("link 1", "Action1", "Controller1")
    @Html.MenuItem("link 2", "Action2", "Controller2")
    ...
</ul>

现在剩下的就是在CSS类中定义.active规则:

.active {
    ... something fancy to pop the currently selected link from the others
}