问题描述
我需要对输入字段进行自定义实现,因此我创建了以下类:
[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自定义这个函数。