Я пытаюсь получить шаблон редактора c, использующий Blazor, который привязывается к свойствам, найденным по отражению, следующим образом:
@typeparam TItem
@foreach (var propertyName in FieldsList) {
<div>
<InputText id="name" @bind-Value="@getBindProperty(propertyName)" />
</div>
}
@functions {
[Parameter]
public TItem ItemEditModel { get; set; }
public string[] FieldsList {
get {
// get all properties decorated with some custom attribute...
return typeof(TItem).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(MyCustomAttribute))).Select(x => x.Name).ToArray();
}
}
public string getBindProperty(string propName) {
return string.Format("{0}.{1}", nameof(ItemEditModel), propName);
}
}
Выше не принимается как Левая рука сторона присвоения должна быть переменной, свойством или индексатором .
Поэтому я не могу привязать свойство к его имени, поэтому я продолжал пробовать другой синтаксис, например
<InputText id="name" @bind-Value="ItemEditModel.propertyName" />
Это также не принимается, так как TItem не содержит определения 'propertyName' .
Хорошо, все вышесказанное имеет смысл - но ключевой вопрос - есть ли что-то, что с этим нужно сделать, или невозможно привязать элемент управления к свойству по его имени?
БОНУСНЫЙ ВОПРОС: Если это действительно возможно, есть ли способ сделать переключение в зависимости от тип свойства (как правило, только такие атомы c, как «string», «DateTine», «int »,« double »,« bool »...)?