#c# #asp.net-core #asp.net-core-mvc #asp.net-core-tag-helpers
#c# #asp.net-ядро #asp.net-core-mvc #asp.net-core-tag-помощники
Вопрос:
Мне нужно создать пользовательскую реализацию для поля ввода, поэтому я создал следующий класс:
[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) amp;amp; 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;
Ну, я больше не знаю, как я могу пройти мимо этого!
Ответ №1:
Вы можете использовать asp.net core 3 или выше, но NameAndIdProvider — это сборка ниже 2.2, которая является исходным кодом.
Область действия Internal ограничена определенной сборкой, но сборка здесь другая, поэтому на нее нельзя ссылаться. Лучший способ — настроить эту функцию в текущем проекте в соответствии с приведенным выше GetFullHtmlFieldName .