ASP.NET Core 2中Tag Helper未被处理

5

我已经添加了以下标签助手:

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会对其进行警告。
然后,在我的一个页面中添加以下内容:
<div k-validation-for="OldPassword" k-error-class="has-danger"></div>

如果我加载页面,服务器端没有控制台输出,并且 k-validation-fork-error-class 被原样转发到生成的页面(而不是将 has-danger 类添加到 class 属性中)。
我做错了什么?

我使用Mac OS X,因此通过dotnet控制台/终端应用程序来执行。调用dotnet build/dotnet run命令。 - Shoe
1个回答

16

在注册标签助手时,需要使用程序集(assembly)而不是命名空间 - 这在文档中有解释。

...第二个参数“Microsoft.AspNetCore.Mvc.TagHelpers”指定包含标签助手的程序集。Microsoft.AspNetCore.Mvc.TagHelpers是内置的ASP.NET Core标签助手的程序集。

因此,在你的情况下,你只需更改这个:

@addTagHelper *, X.TagHelpers

变成这样:

@addTagHelper *, X

这个链接结合起来对我帮助很大。link - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接