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, отсюда и вопросительные знаки. Последнее предостережение: я дома, поэтому я на самом деле не пробовал.

Другие вопросы по тегам