Ниже следует подобрать собственный шаблон из основного обзора:
@model CopyFromVM
@Html.EditorFor(x => x.EntityIds)
Следующие не будет:
@model CopyFromVM
@Html.EditorForModel()
Причиной этого является, потому что структура не рекурсии в комплекс свойства объекта. Вы можете изменить шаблон редактора по умолчанию Object.cshtml
, как объяснил Брэд Уилсон в this blog post (см. Раздел «Неглубокое погружение против глубокого погружения» в конце его сообщения).
Также убедитесь, что ваш шаблон редактора помещен в правильную папку: ~/Views/Shared/EditorTemplates/MultiEntityList.cshtml
, а не EditorTemplate
, как указано в вашем вопросе (обратите внимание на отсутствующие s
).
В качестве побочного замечания, то, как вы генерирующее имя и идентификационных атрибуты вашего списка выбора внутри шаблона редактора не является правильным, потому что вы не принимая во внимание уровня вложенности. Представьте себе, например, что CopyFromVM
используется как свойство еще одной модели родительского представления. В этом случае имя избранного будет неправильно и модель Связыватель по умолчанию не сможет регидратацию значения: Используйте следующие вместо:
@model ICollection<int>
<select name="@ViewData.TemplateInfo.GetFullHtmlFieldName("")" id="@ViewData.TemplateInfo.GetFullHtmlFieldId("")" multiple="multiple" >
...
</select>
Ну, на самом деле, нет, у вас уже есть помощники, которые делают эта работа для вас @Html.ListBox
. Элементы HTML-формы жесткого кодирования в представлениях ASP.NET MVC кажутся довольно хрупким процессом, который я бы рекомендовал вам избежать.
И еще одна сторона замечание: для того, чтобы сгенерировать список выбора обычно нужно 2 свойства на модели вида: один, который будет содержать выбранные значения и один, который будет содержать все значения. Так что строго набрав ваш шаблон редактора до ICollection<int>
, это ИМХО неправильный подход здесь.
:(Имо не имеет смысла не повторяться. Особенно, что у меня есть атрибут UIHint. У меня скорее есть атрибут, который перестает рекурсивно, например, ScaffoldColumn, и по умолчанию он должен возвращаться. Кровавая структура. много для информации. – mathk
«s» - это опечатка в моем вопросе, извините за это. – mathk
@mathk, абсолютно тривиально написать собственный шаблон редактора для 'Object.cshtml', если вам не нравится поведение по умолчанию и измените это поведение, чтобы оно соответствовало вашим потребностям. –