C# ASP.NET Core 2中未处理标记帮助程序

C# ASP.NET Core 2中未处理标记帮助程序,c#,asp.net,.net,asp.net-core,asp.net-core-2.0,C#,Asp.net,.net,Asp.net Core,Asp.net Core 2.0,我添加了以下标记帮助器: 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.Ra

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

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);
        }
    }
}
然后在
\u ViewImports.cshtml
中,我添加了一行:

@addTagHelper *, X.TagHelpers
该文件编译正确,如果我引入语法错误,dotnet build会警告我

然后在我的一页中,我添加了:

<div k-validation-for="OldPassword" k-error-class="has-danger"></div>

如果我加载页面,我在服务器端看不到任何控制台输出,
k-validation-for
k-error-class
按原样转发到生成的页面(与将
has danger
类添加到
class
属性相反)


我做错了什么?

注册标记帮助程序时,需要的是程序集,而不是名称空间-在中解释

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

因此,在您的情况下,您可以更改以下内容:

@addTagHelper *, X.TagHelpers
为此:

@addTagHelper *, X

注册标记帮助程序时,需要的是程序集,而不是名称空间(在中解释)

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

因此,在您的情况下,您可以更改以下内容:

@addTagHelper *, X.TagHelpers
为此:

@addTagHelper *, X

我在Mac OS X上,所以通过
dotnet
控制台/终端应用程序。调用
dotnet build
/
dotnet run
。我在Mac OS X上,所以通过
dotnet
控制台/终端应用程序。调用
dotnet build
/
dotnet run