Редактирование свойства IEnumerable модели в представлении MVC - PullRequest
1 голос
/ 06 декабря 2011

У меня есть ситуация, когда мне нужно отредактировать перечисляемое свойство в модели представления:

public class ViewModel
{
    public MyObj Obj { get; set; }
    public IEnumerable<MyObj> MyObjs = new List<MyObj>();
}

Я подписался на этот пост;действие контроллера:

public ActionResult Index()
{
    var viewModel = new ViewModel();
    viewModel.Obj = new Obj() { Name = "0", Value = true };
    var o1 = new MyObj() { Name = "1", Value = false };
    var o2 = new MyObj() { Name = "2", Value = false };
    viewModel.Objs = new List<Obj>() { o1, o2 };

    return View(viewModel);
}

[HttpPost]
public ActionResult Index(ViewModel viewModel)
{
    return View(viewModel);
}

Представление «Индекс» выглядит следующим образом:

<% using (Html.BeginForm()) { %>

    <table>
        <tr>
            <th>Name</th>
            <th>Value</th>
        </tr>
        <%= Html.EditorFor(x => x.Objs) %>
    </table>

    <br />

    <input type="submit" value="Submit" />

<% } %>

И шаблон редактора в «~ / Views / Home / EditorTemplates / Obj.ascx»:

    <tr>
        <td><%: Html.TextBoxFor(x => x.Name) %></td>
        <td><%: Html.CheckBoxFor(x => x.Value) %></td>
    </tr>

Проблема: перейдите к индексу, данные отображаются.POST, и перечисляемые данные исчезают.Шаг за шагом, единственное число «Obj» в модели представления остается, поэтому исчезают только перечисляемые данные.

Я уже некоторое время смотрю на это, если кто-нибудь сможет помочьбыть блестящим.

Приветствия,

Тим.

1 Ответ

0 голосов
/ 08 декабря 2011

Взгляните на этого поста Фила Хаака, MVC2 изначально не поддерживает привязку списка обратно к модели представления, если вы не выполните небольшую манипуляцию.

Обновление: я рассмотрел это немного больше и думаю, что вы должны попробовать добавить TryUpdateModel(viewModel.MyObjs, "MyObjs"); к вашему контроллеру. Это информирует связыватель модели о том, что он должен использовать префикс привязки «MyObjs» для присоединения данных из формы к коллекции в вашей ViewModel.

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