В своем проекте я заметил, что все поля моей формы следуют одному и тому же шаблону. Типичный пример:
<div class="col-x-x">
<label asp-for="Property"></label>
<span message="description">
<input asp-for="Property" />
<span asp-validation-for="Property"></span>
</div>
Я хотел бы иметь какой-то способ сгруппировать этот код, чтобы я просто передал ему свойство модели, и он выводил правильный HTML. например.:
<form-field for="Property" ...>
or
@Html.StringFormField(...)
Проблема, с которой я сталкиваюсь, заключается в том, что какой бы метод я ни пробовал, выводимый html - это исходный html, указанный выше, а не html, созданный с помощью помощников тегов. Я пробовал оба метода, и ни один из них не увенчался успехом. Кроме того, я попытался создать функцию бритвы, но все мои попытки не компилируются, и я не могу заставить работать частичное представление, так как я не смог найти способ получить информацию о свойстве после передачи строки в Посмотреть.
Моя последняя попытка заключалась в использовании помощника по тегу, однако здесь была та же проблема, о которой говорилось ранее. Последняя версия кода выглядит следующим образом:
[HtmlTargetElement("form-field", Attributes = "for")]
public class FormFieldTagHelper : TagHelper
{
[HtmlAttributeName("for")]
public ModelExpression For { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "div";
output.TagMode = TagMode.StartTagAndEndTag;
var contentBuilder = new HtmlContentBuilder();
contentBuilder.AppendHtmlLine($"<label asp-for=\"{For}\"></label>");
contentBuilder.AppendHtmlLine($"<span message=\"description.\"></span>");
contentBuilder.AppendHtmlLine($"<input asp-for=\"{For}\"/>");
contentBuilder.AppendHtmlLine($"<span asp-validation-for=\"{For}\"/></span>");
output.Content.SetHtmlContent(contentBuilder);
}
}
Существует проблема для решения этой проблемы (без решения), которая предположил, что порядок импорта был потенциальной проблемой, поэтому мой импорт выглядит следующим образом:
@addTagHelper Project.Web.Features.Shared.*, Project.Web
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Приветствуется любое решение, будь то помощник по тегу или другой метод.