Asp.net core 自定义验证属性没有';不能使用自定义标记帮助器,只能使用静态html

Asp.net core 自定义验证属性没有';不能使用自定义标记帮助器,只能使用静态html,asp.net-core,model-view-controller,core,Asp.net Core,Model View Controller,Core,我一直在尝试实现这一点,但现在没有运气。我 为我的项目中的文本框构建了一个自定义标记帮助器,我正在使用它 像这样: 当我对自定义标记帮助器使用自定义验证属性时 IClientModelValidator方法 从未调用AddValidation(ClientModelValidationContext上下文) 而且验证工作永远不会完成 然而,当我不使用我的标记帮助程序而只使用静态HTML时,就像 因此: @*有效*@ 电话` 验证属性方法确实在运行……有人知道为什么属性类只适用于静态html而不

我一直在尝试实现这一点,但现在没有运气。我 为我的项目中的文本框构建了一个自定义标记帮助器,我正在使用它 像这样:

当我对自定义标记帮助器使用自定义验证属性时 IClientModelValidator方法 从未调用AddValidation(ClientModelValidationContext上下文) 而且验证工作永远不会完成

然而,当我不使用我的标记帮助程序而只使用静态HTML时,就像 因此:

@*有效*@
电话`
验证属性方法确实在运行……有人知道为什么属性类只适用于静态html而不适用于标记帮助器吗

验证属性方法确实在运行……有人知道为什么吗 属性类仅适用于静态html,而不适用于标记 帮手

显然,
文本框
不是正式定义的标记,因此需要将其创建为自定义标记帮助器,以使其与
输入
标记相同

为了使
文本框的
asp for
属性自动触发对添加到
PhoneNumber
inputformattribute
的验证,您创建的自定义标记帮助器需要从中继承

首先,在项目中创建以下MyCustomTagHelper类:

namespace MyProject.CustomTagHelper
{
    [HtmlTargetElement("text-box", Attributes = "asp-for")]
    public class MyCustomTagHelper : InputTagHelper
    {
        public MyCustomTagHelper(IHtmlGenerator htmlGenerator) : base(htmlGenerator) { }
      
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            base.Process(context, output);// the key point
            output.TagName = "input";
            output.Attributes.SetAttribute("class", "form-control");
        }
    }
}
然后,在
视图/\u ViewImports.cshtml
文件中,添加以下代码(此处
MyProject
是您的项目名称):

使用文本框标记辅助对象,如下所示:

<text-box asp-for="@Model.PhoneNumber"></text-box>   
以下是调试过程:

验证属性方法确实在运行……有人知道为什么吗 属性类仅适用于静态html,而不适用于标记 帮手

显然,
文本框
不是正式定义的标记,因此需要将其创建为自定义标记帮助器,以使其与
输入
标记相同

为了使
文本框的
asp for
属性自动触发对添加到
PhoneNumber
inputformattribute
的验证,您创建的自定义标记帮助器需要从中继承

首先,在项目中创建以下MyCustomTagHelper类:

namespace MyProject.CustomTagHelper
{
    [HtmlTargetElement("text-box", Attributes = "asp-for")]
    public class MyCustomTagHelper : InputTagHelper
    {
        public MyCustomTagHelper(IHtmlGenerator htmlGenerator) : base(htmlGenerator) { }
      
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            base.Process(context, output);// the key point
            output.TagName = "input";
            output.Attributes.SetAttribute("class", "form-control");
        }
    }
}
然后,在
视图/\u ViewImports.cshtml
文件中,添加以下代码(此处
MyProject
是您的项目名称):

使用文本框标记辅助对象,如下所示:

<text-box asp-for="@Model.PhoneNumber"></text-box>   
以下是调试过程:

namespace MyProject.CustomTagHelper
{
    [HtmlTargetElement("text-box", Attributes = "asp-for")]
    public class MyCustomTagHelper : InputTagHelper
    {
        public MyCustomTagHelper(IHtmlGenerator htmlGenerator) : base(htmlGenerator) { }
      
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            base.Process(context, output);// the key point
            output.TagName = "input";
            output.Attributes.SetAttribute("class", "form-control");
        }
    }
}
@addTagHelper *, MyProject
<text-box asp-for="@Model.PhoneNumber"></text-box>   
<input type="text" data-inputmask="'alias': 'GCIS-phone-number'" data-rule-phoneus="true=&quot;&quot;" id="PhoneNumber" name="PhoneNumber" value="123432" class="form-control">