【发布时间】:2011-11-01 17:57:01
【问题描述】:
例如,在 StackOverflow 中,您可以在顶部菜单中设置以下选项:问题、标签、用户、徽章、未答复和。当您位于其中一个部分时,它会以橙色突出显示。
在 ASP.NET MVC 中实现这一目标的最佳方法是什么?
到目前为止,作为概念证明,我已经完成了这个助手:
public static String IsCurrentUrl(this UrlHelper url, String generatedUrl, String output)
{
var requestedUrl = url.RequestContext.HttpContext.Request.Url;
if (generatedUrl.EndsWith("/") && !requestedUrl.AbsolutePath.EndsWith("/"))
generatedUrl=generatedUrl.Substring(0, generatedUrl.Length - 1);
if (requestedUrl.AbsolutePath.EndsWith(generatedUrl))
return output;
return String.Empty;
}
如果当前请求与该链接匹配,则该方法将输出字符串添加到元素。所以可以这样使用:
<li>
<a href="@Url.Action("AboutUs","Home")" @Url.IsCurrentUrl(@Url.Action("AboutUs", "Home"), "class=on")><span class="bullet">About Us</span></a>
</li>
第一个问题,我基本上两次调用Url.Action,首先是“href”属性,然后是助手,我认为必须有更好的方法来做到这一点。第二个问题,这不是比较两个链接的最佳方法。我想我可以创建一个新的Html.ActionLink 重载,所以我不需要调用Url.Action 两次,但是有什么内置方法可以做到这一点吗?
奖励:如果我添加 "class=\"on\"",MVC 将呈现 class=""on""。为什么?
问候。
【问题讨论】:
-
您是否考虑过使用内置的站点地图功能来管理您的活动导航节点?
标签: asp.net asp.net-mvc asp.net-mvc-3 navigation