У меня есть модель с множеством свойств. Создание или обновление их представлений - хлопотная работа.
Итак, я пытаюсь использовать Reflection для создания представления во время выполнения: (PS: да, я знаю, что интерфейс очень важен, я должен использовать Vue или другой фрейм для создания представлений во время разработки. Но я просто хочу попробовать создавать формы во время выполнения, да, я урод. LOL)
Вот мой код:
@{
var dic = Model.GetAttributePropsByCategory();// get PropertyInfo by CategoryAttribute and custom DisplayIndexAttribute
}
@foreach (var items in dic)
{
var category = items.Key; // InfoCategoryAttribute
foreach (var tuple in items.Value)
{
var displayIndex = tuple.Item1; // Custom: DisplayIndexAttribute
var prop = tuple.Item2; // PropertyInfo
<input asp-for="@prop.Name" class="form-control"/>
}
}
Моя цель - :
<input class="form-control valid" type="text" data-val="true" data-val-required="The VIN field is required." id="VIN" name="VIN" value="VIN001" aria-describedby="VIN-error" aria-invalid="false">
Но результат такой:
<input class="form-control valid" type="text" data-val="true" data-val-required="The Name field is required." id="prop_Name" name="prop.Name" aria-describedby="prop_Name-error" aria-invalid="false">
Итак, я прочитал исходный код в aspnetcore. mvc .taghelpers . Я обнаружил, что ключ - InputTagHelper.For:
public class InputTagHelper : TagHelper
{
...
[HtmlAttributeName(ForAttributeName)]
public ModelExpression For { get; set; }
...
}
Но я не могу понять, как был создан InputTagHelper.For. Поэтому я не знаю, как отменить его для достижения моей цели.
Есть ли какие-нибудь предложения? Спасибо.