在我的母版页中,我有一个使用ActionLinks创建的顶级菜单:
<ul id="topNav">
<li><%=Html.ActionLink("Home", "Index", "Home")%></li>
<li><%=Html.ActionLink("News", "Index", "News")%></li>
<li><%=Html.ActionLink("Projects", "Index", "Projects")%></li>
<li><%=Html.ActionLink("About", "About", "Home")%></li>
<li><%=Html.ActionLink("Contact", "Contact", "Home")%></li>
<li><%=Html.ActionLink("Photos", "Photos", "Photos")%></li>
</ul>
我想动态地将名为“current”的类添加到站点当前指向的链接。因此,例如,当网站位于主页时,菜单链接将呈现如下:
<li><a class="current" href="/">Home</a></li>
我是否必须重载ActionLink方法来执行此操作,或者创建一个全新的HtmlHelper,还是有更好的方法?
我对MVC很新,所以我不确定解决这个问题的正确方法。
提前致谢。
答案 0 :(得分:2)
你可以为此编写自己的扩展方法(抱歉我的VB有点生锈):
<Extension> _
Public Shared Function MyActionLink( _
ByVal htmlHelper As HtmlHelper, _
ByVal linkText As String, _
ByVal actionName As String, _
ByVal controllerName As String) As MvcHtmlString
Dim currentAction As String = TryCast(htmlHelper.ViewContext.RouteData.Values.Item("action"), String)
Dim currentController As String = TryCast(htmlHelper.ViewContext.RouteData.Values.Item("controller"), String)
If ((actionName = currentAction) AndAlso _
(controllerName = currentController)) _
Then
Return htmlHelper.ActionLink( _
linkText, _
actionName, _
controllerName, _
Nothing, _
New { _
.class = "current" _
})
End If
Return htmlHelper.ActionLink(linkText, actionName, controllerName)
End Function
你可以这样使用:
<ul id="topNav">
<li><%=Html.MyActionLink("Home", "Index", "Home")%></li>
<li><%=Html.MyActionLink("News", "Index", "News")%></li>
<li><%=Html.MyActionLink("Projects", "Index", "Projects")%></li>
<li><%=Html.MyActionLink("About", "About", "Home")%></li>
<li><%=Html.MyActionLink("Contact", "Contact", "Home")%></li>
<li><%=Html.MyActionLink("Photos", "Photos", "Photos")%></li>
</ul>
答案 1 :(得分:0)
从它的声音中你可能想要这样的东西。
为每个控制器创建一个默认构造函数,并在ViewData中设置一个值。
public HomeController()
: base()
{
ViewData["selected"] = "home";
}
然后在您的Site.Master文件中,您可以执行以下操作:
<li class="<%= ((ViewData["selected"] == "home") ? "current" : "") %>"><%= Html.ActionLink("Home", "Index", "Home") %></li>
它可以被清理一下,但你明白了。