Для EditorFor
, TextBoxFor
и т. Д. Требуется выражение, которое дает им доступ к метаданным о свойстве, которое вы используете. Convert.ToDateTime
удаляет этот доступ (потому что вместо этого он возвращает значение), поэтому методы не знают, какое имя свойства использовать или какую-либо дополнительную информацию, например атрибут [Display]
. Я бы посоветовал вам сделать что-то вроде:
@switch (Model.ExtraFields[i].PropertyType) {
case (short)Enums.PropertyType.Boolean:
@Html.EditorFor(model => Model.Values[i].ExtraFieldValue, "BooleanEditor")
break;
case (short)Enums.PropertyType.DateTime:
@Html.EditorFor(model => Model.Values[i].ExtraFieldValue, "DateTimeEditor")
break;
default:
@Html.TextBoxFor(model => Model.Values[i].ExtraFieldValue)
break;
}
Затем вы создаете EditorTemplates
(как подкаталог вашего контроллера с конкретными шаблонами с именем BooleanEditor.cshtml
и т. Д., Например так:
@model object
@Html.CheckBox("", Convert.ToBoolean(Model))
оставив первый параметр пустым, вы будете автоматически использовать имя свойства, предоставленное через выражение из вызова EditorFor
.