在ASP.NET MVC MasterPage View中以编程方式应用样式

时间:2010-11-26 10:13:11

标签: asp.net-mvc model-view-controller asp.net-mvc-2

在我的MVC Web应用程序中实现以下内容的最佳/最合适的方法是什么?

我有一个名为Site.Master的视图(这是我的MasterPage视图),在这个视图的顶部,我有5个链接,作为我的主站点导航,例如。

<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Links</a></li>
    <li><a href="">Contact Us</a></li>
    ...etc
</ul>

我想要的是能够根据用户当前正在查看的网站的哪个部分突出显示相应的文本链接,因此如果他们使用“联系我们”页面,则母版页上的“联系我们”链接视图将应用不同的CSS样式。

在Web窗体中,我的每个链接都是一个HyperLink控件,我在MasterPage后面的代码中有一个属性,因此为每个HyperLink控件分配相关的CssStyle。

在我的MasterPage视图中实现相同功能的最佳方法是什么,现在我正在使用MVC?

1 个答案:

答案 0 :(得分:4)

我可能会编写一个html帮助器,它将生成这些菜单链接,并基于当前控制器和动作将css类current应用于锚点:

public static MvcHtmlString MenuLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName
)
{
    string currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
    string currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
    if (actionName == currentAction && controllerName == currentController)
    {
        return htmlHelper.ActionLink(
            linkText,
            actionName,
            controllerName,
            null,
            new {
                @class = "current"
            });
    }
    return htmlHelper.ActionLink(linkText, actionName, controllerName);
}

然后在我看来使用这个助手:

<ul>
  <li><%= Html.MenuLink("Home", "Index", "Home") %></li>
  <li><%= Html.MenuLink("Links", "Links", "Home") %></li>
  <li><%= Html.MenuLink("Contact us", "Contact", "Home") %></li>
</ul> 

然后剩下的就是在CSS文件中定义这个current类来突出显示:

.current {
    ...
}