我尝试扩展内置的 AnchorTagHelper 对象以自动向生成的 url 添加文化相关设置。
我的代码:
namespace MyCoreSite.Mvc.TagHelpers
{
[HtmlTargetElement("a")]
public class MyAnchorTagHelper : AnchorTagHelper
{
public MyAnchorTagHelper(IHtmlGenerator generator) : base(generator)
{
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
var requestCulture = this.ViewContext.HttpContext.Features.Get<IRequestCultureFeature>();
if (context.AllAttributes["asp-route-culture"] == null)
{
this.RouteValues.Add("culture", requestCulture.RequestCulture.UICulture.Name);
}
base.Process(context, output);
output.TagName = "a";
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我在 [HtmlTargetElement("a")] 属性中使用默认的 'a' 标记名称时,它会引发此异常:
System.InvalidOperationException: '无法覆盖 'href' 属性。具有指定“href”的属性不得以“asp-route-”或“asp-action”、“asp-controller”、“asp-area”、“asp-route”、“asp-protocol”开头、“asp-host”、“asp-fragment”、“asp-page”或“asp-page-handler”属性。
如果我使用另一个标签名称而不是 'a'(例如 'aa')它的工作,但我想在我的视图中使用 'a' 标签。
请帮我解决这个问题!谢谢!