我有一个小型MVC网站,它使用Html.ActionLink帮助器作为导航栏。我想改变的一件事是默认的ActionLink将呈现一个到页面的html链接,即使这是当前页面。
例如,它会创建一个这样的链接:
<a href="/myUrl">Some title...</a>
即使你已经在/ myUrl上了。如果它会禁用该链接并且可能插入一个特殊的CSS类来显示当前访问的页面,那将是很好的,如下所示:
<a href="#" class="currentPageCSS">My Url</a>
<a href="/someOtherUrl">Some Other Url</a>
在加载MVC网站之前一定遇到过这个问题,所以我很想知道其他人是如何处理它的。
答案 0 :(得分:32)
这似乎是推送自定义HTML帮助程序的好方案。让我们滚动它:
public static class LinkExtensions
{
public static MvcHtmlString MyActionLink(
this HtmlHelper htmlHelper,
string linkText,
string action,
string controller
)
{
var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
var currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
if (action == currentAction && controller == currentController)
{
var anchor = new TagBuilder("a");
anchor.Attributes["href"] = "#";
anchor.AddCssClass("currentPageCSS");
anchor.SetInnerText(linkText);
return MvcHtmlString.Create(anchor.ToString());
}
return htmlHelper.ActionLink(linkText, action, controller);
}
}
并在您的视图中:
<%= Html.MyActionLink("hello foo", "Index", "Home") %>
<%= Html.MyActionLink("hello bar", "About", "Home") %>
...
并且根据你的位置,助手将生成适当的锚点。