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