c# - 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以下的程序集,也就是源代码。
Internal的范围仅限于某个程序集,但是这里的程序集不同,所以不能引用。更好的方法是根据上面的GetFullHtmlFieldName在当前项目中自定义这个函数。
推荐阅读
- python - 不同的 websocket 连接但收到的消息混淆了
- spring-boot - 在外部Tomcat中启动Spring Boot Web Application时,我问了一个关于404页的问题
- macos - 如何设置默认应用程序窗口大小
- kotlin - 将数组拆分为子数组 kotlin
- ssis - SSIS - 远程主机的 Sybase SQL Anywhere ODBC 驱动程序错误,本地数据库连接正常
- c++ - 理解 C++ 中的动态内存的困惑
- ios - 在苹果 M1(基于新 arm 的 macbook pro)上使用 xcode 12 的 react-native 构建失败
- rust - 如何在火箭中使用结构的方法作为处理程序
- python - Python正则表达式删除一些标点符号周围的空格
- javascript - 相对于未过滤的数据有效地重新排序过滤的数据子集