, <a>
, MVC AnchorTagHelper
. , _ViewImports.cshtml :
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@addTagHelper "*, WebApplication5"
, , TagHelperOutput
href, AnchorTagHelper
, asp-controller
asp-action
.
//Get url from href attribute generated by the default AnchorTagHelper
var url = output.Attributes["href"].Value.ToString();
URL- , :
var currentRoutUrl = this.urlHelper.Action();
, . ! __ route_group ArgumentException: :
var currentRouteUrl = this.urlHelper.RouteUrl(
this.actionContextAccessor.ActionContext.RouteData.Values);
URL- . , URL- "/" "//", Home )
, :
:
[HtmlTargetElement("a", Attributes = "highlight-active")]
public class RouteTagHelper : TagHelper
{
private IActionContextAccessor actionContextAccessor;
private IUrlHelper urlHelper;
public RouteTagHelper(IActionContextAccessor actionContextAccessor, IUrlHelper urlHelper)
{
this.actionContextAccessor = actionContextAccessor;
this.urlHelper = urlHelper;
}
[HtmlAttributeName("css-active-class")]
public string CssClass { get; set; } = "active";
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Attributes.Remove(output.Attributes["highlight-active"]);
var url = output.Attributes["href"].Value.ToString();
var currentRouteUrl = this.urlHelper.Action();
if (url == currentRouteUrl)
{
var linkTag = new TagBuilder("a");
linkTag.Attributes.Add("class", this.CssClass);
output.MergeAttributes(linkTag);
}
}
}
, /:
<a class="menu" asp-controller="Home" asp-action="Index" highlight-active>Home</a>
<a class="menu" asp-controller="Home" asp-action="About" highlight-active>About</a>
<a class="menu" asp-controller="Home" asp-action="Index" highlight-active css-active-class="myActiveClass">Home with special class name</a>
<a class="menu" asp-controller="Home" asp-action="Index">Home using default tag helper</a>
( URL / / //):
<a class="menu active" href="/">Home</a>
<a class="menu" href="/Home/About">About</a>
<a class="menu myActiveClass" href="/">Home with special class</a>
<a class="menu" href="/">Home using default tag helper</a>
PS. , , href
( , href base.Process
). URL- ( httpContext.Request).