MVC 3 с формами и списками: связыватель модели по умолчанию и EditorFor - PullRequest
3 голосов
/ 11 февраля 2011

Модель:

public class MyObject
{
    public IList<Entry> Entries;
}

public class Entry
{
    public string Name { get; set; }
}

Если я использую EditorFor по умолчанию (model => model.Entries), значения имени / идентификатора:

<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 Ответ

3 голосов
/ 11 февраля 2011

Я думаю, что вы можете сделать большую часть этого, используя шаблоны, без необходимости явно перебирать список, что, кажется, вызывает ваши проблемы с подшивкой модели.

Попробуйте сделать эти общие шаблоны редактора:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...