在MVC视图中编辑IEnumerable模型属性

时间:2011-12-06 01:12:49

标签: asp.net-mvc-2

我遇到需要在视图模型中编辑可枚举属性的情况:

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

我已关注this帖子;控制器动作:

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 :(得分:0)

看看Phil Haack的this post,MVC2本身并不支持将列表绑定回viewmodel,除非你做一点操作。

更新:我已经对此进行了一些调查,并认为您应该尝试将TryUpdateModel(viewModel.MyObjs, "MyObjs");添加到您的控制器中。这告诉模型绑定器它应该使用&#34; MyObjs&#34;绑定前缀,用于将表单中的数据附加到ViewModel中的集合。