标记助手未在ASP.NET Core 2中处理

我添加了以下标记帮助器:

using System; using System.Linq; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; namespace X.TagHelpers { [HtmlTargetElement(Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)] public class ValidationClassTagHelper : TagHelper { private const string ValidationForAttributeName = "k-validation-for"; private const string ValidationErrorClassName = "k-error-class"; [HtmlAttributeName(ValidationForAttributeName)] public ModelExpression For { get; set; } [HtmlAttributeName(ValidationErrorClassName)] public string ValidationErrorClass { get; set; } [HtmlAttributeNotBound] [ViewContext] public ViewContext ViewContext { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { Console.WriteLine("\n\n------------!!!!!!---------\n\n"); ModelStateEntry entry; ViewContext.ViewData.ModelState.TryGetValue(For.Name, out entry); if (entry == null || !entry.Errors.Any()) return; var tagBuilder = new TagBuilder(context.TagName); tagBuilder.AddCssClass(ValidationErrorClass); output.MergeAttributes(tagBuilder); } } } 

然后在_ViewImports.cshtml添加了以下行:

 @addTagHelper *, X.TagHelpers 

该文件已正确编译,如果我引入语法错误, dotnet build向我发出警告。

然后在我的一个页面中添加:

 

如果我加载页面,我在服务器端看不到控制台输出,并且k-validation-fork-error-class按原样转发到生成的页面(而不是将has-danger类添加到class属性) 。

我究竟做错了什么?

注册Tag Helpers时,它是必需的程序集 ,而不是命名空间 – 在文档中进行了解释。

…第二个参数“Microsoft.AspNetCore.Mvc.TagHelpers”指定包含Tag Helpers的程序集。 Microsoft.AspNetCore.Mvc.TagHelpers是内置ASP.NET核心标记助手的程序集。

所以在你的情况下,你可以改变这个:

 @addTagHelper *, X.TagHelpers 

对此:

 @addTagHelper *, X