微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NameAndIdProvider 在类的上下文中找不到引用 - ASP.NET Core MVC

如何解决NameAndIdProvider 在类的上下文中找不到引用 - ASP.NET Core MVC

我需要对输入字段进行自定义实现,因此我创建了以下类:

[HtmlTargetElement("input",Attributes = "tm-for",TagStructure = TagStructure.WithoutEndTag)]
public class TmInputTagHelper : InputTagHelper
{
    
    public TmInputTagHelper(IHtmlGenerator generator) : base(generator)
    {            
    }

    [HtmlAttributeName("tm-for")]
    public ModelExpression TmFor
    {
        get => For;
        set => For = value;
    }

    public override void Process(TagHelperContext context,TagHelperOutput output)
    {
        base.Process(context,output);


        string fullName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext,For.Name);

        if (ViewContext.ViewData.ModelState.TryGetValue(fullName,out var entry) && entry.Errors.Count > 0)
        {
            output.AddClass("is-invalid",HtmlEncoder.Default);
            output.RemoveClass("input-validation-error",HtmlEncoder.Default);
        }
    }
}

但是,我找不到这个类的参考:NameAndIdProvider:

string fullName = NameAndIdProvider.GetFullHtmlFieldName(ViewContext,For.Name);

我有以下用途:

using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Text.Encodings.Web;

好吧,我不知道我怎么能克服它了!

解决方法

您可以使用 asp.net core 3 或更高版本,但 NameAndIdProvider 是低于 2.2 的程序集,即 source code

Internal 的范围仅限于某个程序集,但是这里的程序集不同,因此无法引用。更好的方法是在当前项目中根据上面的GetFullHtmlFieldName自定义这个函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。