http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
我遇到的问题是我不只是尝试将一个集合发送回Controller操作,而是一个带有集合的ViewModel。
我有一个基本上看起来像这样的课程:
public class MyViewModel
{
public int IncidentNumber { get; set; }
public string StoreId { get; set; }
public string RepId { get; set; }
public string OrderStatus { get; set; }
public CustomerViewModel Customer { get; set;
//... other properties and SelectLists for binding
public IEnumerable<OrderItemViewModel> OrderItemViewModels { get; set; }
我实际上可以在回发中获取CustomerViewModel数据,但OrderItemViewModels列表为空。我如何取回这些?菲尔的文章没有帮助那里。
答案 0 :(得分:5)
我在这里有一个类似的问题MVC binding to model with list property ignores other properties,它通过在视图中使用以下代码来解决
<div class="editor-field">
@for (int i = 0; i < Model.MyCollection.Count(); i++)
{
@Html.HiddenFor(m => m.MyCollection[i].Id)
@Html.HiddenFor(m => m.MyCollection[i].ParentId)
@Html.HiddenFor(m => m.MyCollection[i].Name)
@Html.TextBoxFor(m => m.MyCollection[i].Value)
}
</div>
答案 1 :(得分:1)
使用编辑器模板:
@model MyViewModel
@using (Html.BeginForm())
{
... some input fields
@Html.EditorFor(x => x.OrderItemViewModels)
<input type="submit" value="OK" />
}
然后在相应的编辑器模板中,该模板将自动为OrderItemViewModels
集合(~/Views/Shared/EditorTemplates/OrderItemViewModels.cshtml
)的每个元素呈现:
@model OrderItemViewModels
<div>
@Html.LabelFor(x => x.Prop1)
@Html.EditorForFor(x => x.Prop1)
</div>
<div>
@Html.LabelFor(x => x.Prop2)
@Html.EditorForFor(x => x.Prop2)
</div>
...