我遇到需要在视图模型中编辑可枚举属性的情况:
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”仍然存在,因此只有可枚举的数据正在消失。
我现在已经盯着这个看了一段时间,如果有人能帮到它,那将是非常棒的。
干杯,
添
答案 0 :(得分:0)
看看Phil Haack的this post,MVC2本身并不支持将列表绑定回viewmodel,除非你做一点操作。
更新:我已经对此进行了一些调查,并认为您应该尝试将TryUpdateModel(viewModel.MyObjs, "MyObjs");
添加到您的控制器中。这告诉模型绑定器它应该使用&#34; MyObjs&#34;绑定前缀,用于将表单中的数据附加到ViewModel中的集合。