ASP.NET MVC:突出显示当前 link
ASP.NET MVC: Highlighting current link
我需要在菜单中突出显示当前 link,但是 HTML 的结构如下所示:
<li class="active">
<a href='@Url.Action("MainPage", "Ticket")'>
<i class="fa fa-fw fa-home"></i>
HomePage
</a>
</li>
我知道有很多不同的解决方案 (+, +):
public static MvcHtmlString MenuLink(
this HtmlHelper helper,
string text, string action, string controller)
{
var routeData = helper.ViewContext.RouteData.Values;
var currentController = routeData["controller"];
var currentAction = routeData["action"];
if (String.Equals(action, currentAction as string,
StringComparison.OrdinalIgnoreCase)
&&
String.Equals(controller, currentController as string,
StringComparison.OrdinalIgnoreCase))
{
return helper.ActionLink(
text, action, controller, null,
new { @class = "active" }
);
}
return helper.ActionLink(text, action, controller);
}
但是我的 HTML 结构有点不同。
我该怎么做?
有什么想法吗?
最后我以这种方式更改了代码并且它起作用了:(感谢@Stephen Muecke)
public static MvcHtmlString MenuLink(
this HtmlHelper helper,
string content, string action, string controller)
{
var routeData = helper.ViewContext.RouteData.Values;
var currentController = routeData["controller"];
var currentAction = routeData["action"];
var builder = new TagBuilder("li")
{
InnerHtml = content
};
if (String.Equals(action, currentAction as string,
StringComparison.OrdinalIgnoreCase)
&&
String.Equals(controller, currentController as string,
StringComparison.OrdinalIgnoreCase))
{
builder.AddCssClass("active");
return MvcHtmlString.Create(builder.ToString());
}
return MvcHtmlString.Create(builder.ToString());
}
我需要在菜单中突出显示当前 link,但是 HTML 的结构如下所示:
<li class="active">
<a href='@Url.Action("MainPage", "Ticket")'>
<i class="fa fa-fw fa-home"></i>
HomePage
</a>
</li>
我知道有很多不同的解决方案 (+, +):
public static MvcHtmlString MenuLink(
this HtmlHelper helper,
string text, string action, string controller)
{
var routeData = helper.ViewContext.RouteData.Values;
var currentController = routeData["controller"];
var currentAction = routeData["action"];
if (String.Equals(action, currentAction as string,
StringComparison.OrdinalIgnoreCase)
&&
String.Equals(controller, currentController as string,
StringComparison.OrdinalIgnoreCase))
{
return helper.ActionLink(
text, action, controller, null,
new { @class = "active" }
);
}
return helper.ActionLink(text, action, controller);
}
但是我的 HTML 结构有点不同。
我该怎么做?
有什么想法吗?
最后我以这种方式更改了代码并且它起作用了:(感谢@Stephen Muecke)
public static MvcHtmlString MenuLink(
this HtmlHelper helper,
string content, string action, string controller)
{
var routeData = helper.ViewContext.RouteData.Values;
var currentController = routeData["controller"];
var currentAction = routeData["action"];
var builder = new TagBuilder("li")
{
InnerHtml = content
};
if (String.Equals(action, currentAction as string,
StringComparison.OrdinalIgnoreCase)
&&
String.Equals(controller, currentController as string,
StringComparison.OrdinalIgnoreCase))
{
builder.AddCssClass("active");
return MvcHtmlString.Create(builder.ToString());
}
return MvcHtmlString.Create(builder.ToString());
}