2010-11-26 69 views
2

在我的MVC Web应用程序中实现以下内容的最佳/最合适的方式是什么?在ASP.NET MVC MasterPage中以编程方式应用样式View

我有一个名为Site.Master(这是我的母版页视图)的视图,并且在这个视图的顶部,我有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表单,我的每一个环节是一个超链接控制,和我在的母版,以便分配相关CssStyle每个HyperLink控件后面的代码的属性。

什么是在我的MasterPage视图中实现同样的事情,现在我使用MVC的最佳方式是什么?

回答

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 { 
    ... 
} 
+0

嗨达林。这几乎完美地工作。我遇到的问题是,对于该网站的其中一个部分,我通过该控制器的两个可能操作中的一个(文章或新文章)来到那里。我有一个局部的看法,我在整个网站上使用了'Article'操作,而不是默认的'LatestArticle'操作,所以无论何时我通过部分视图导航到网站的这一部分,Helper方法中的条件永远不会因为'Article'永远不会作为actionName参数传递给我的MenuLink方法。有什么建议么? – marcusstarnes 2010-11-26 10:54:15

相关问题