MVC 3 с формами и списками: связыватель модели по умолчанию и EditorFor
Модель:
public class MyObject
{
public IList<Entry> Entries;
}
public class Entry
{
public string Name { get; set; }
}
Если я использую EditorFor по умолчанию (model => model.Entries), значения name/id:
<input type="text" value="" name="Entries[0].Name" id="Entries_0__Name">
Если вместо этого я хочу создать шаблон EditorFor, как это:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<CMS.Models.MyObject>>" %>
<div class="list">
<%
for (int i = 0; i < Model.Count; i++)
{ %>
<div class="object" id="<%: i %>">
<%: Html.EditorFor(model => Model[i]) %>
<%: Html.ValidationMessageFor(model => Model[i]) %>
</div>
<% } %>
</div>
Имеются следующие значения имени и идентификатора:
<input type="text" value="" name="Entries.[0].Name" id="Entries__0__Name">
Таким образом, имя имеет точку между именем свойства и [0], а идентификатор имеет дополнительное подчеркивание слева от номера индекса. Это не работает со связывателем модели по умолчанию. Есть ли способ сделать это, который работает со связывателем модели по умолчанию?
1 ответ
Я думаю, что вы можете сделать большую часть этого, используя шаблоны, без необходимости явно перебирать список, что, кажется, вызывает ваши проблемы с подшивкой модели.
Попробуйте сделать эти общие шаблоны редактора:
Шаблон редактора MyObject
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.MyObject>" %>
<div class="list">
<%: Html.EditorFor(m => m.Entries) %>
</div>
Шаблон редактора ввода
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CMS.Models.Entry>" %>
<div class="object" id="<%: ??? %>">
<%: Html.EditorFor(m => m.Name) %>
<%: Html.ValidationMessageFor(m => m.Name) %>
</div>
Единственное, что я еще не понял, - это как получить правильное значение в атрибуте id элемента div, отсюда и вопросительные знаки. Последнее предостережение: я дома, поэтому я на самом деле не пробовал.