По умолчанию при использовании Html.EditorForModel
не ожидайте, что это приведет к сложным свойствам, таким как ваше свойство Tipos
, которое имеет тип IEnumerable<SelectListItem>
. Брэд Уилсон объяснил это в своем посте в блоге (более подробно читайте раздел Shallow Dive vs. Deep Dive в конце поста). Вам нужно написать собственный шаблон редактора для типа Object, если вы хотите, чтобы это произошло.
Другая возможность - указать имя шаблона:
@Html.EditorFor(x => x.Tipos, "SelectListItem")
Также имейте в виду, что ваш шаблон редактора для SelectListItem
неправильный, потому что вы привязываете DropDownListFor к модели в качестве первого аргумента. Не забывайте, что первый аргумент этого помощника должен быть скалярным свойством, которое будет использоваться для хранения выбранного значения. Для этого вам понадобится строковое или целочисленное свойство в вашей модели представления. Второй аргумент представляет коллекцию.
Другим важным аспектом шаблонов редактора является то, что когда у вас есть свойство типа IEnumerable<T>
и шаблон редактора с именем T.cshtml
, этот шаблон редактора должен строго типизироваться в класс T
, а не IEnumerable<T>
, как вы это сделали с вашим SelectListItem.cshtml
шаблоном. Это не применяется, если вы используете UIHint или задаете имя шаблона в качестве второго аргумента помощнику EditorFor. В этом случае шаблон будет напечатан в коллекции.
Итак, подведем итог: вы могли бы реализовать собственный шаблон редактора объектов, как предложил Брэд Уилсон, который вернется к сложным свойствам, или вы могли бы изменить представление _Formulario.cshtml
, указав Editor для каждого отдельного элемента.