首页 > 解决方案 > 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;

好吧,我不知道我怎么能再过去了!

标签: c#asp.net-coreasp.net-core-mvcasp.net-core-tag-helpers

解决方案


你可以使用asp.net core 3或更高版本,但NameAndIdProvider是2.2以下的程序集,也就是源代码

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


推荐阅读