Phil Haack有一篇文章描述了如何设置默认的模型绑定器,以便在post back上绑定到集合:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx我遇到的问题是,我不只是试图将集合发送回控制器动作,而是一个具有集合的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列表是空的。我怎么才能拿回来?菲尔的文章没有帮助。
我有一个类似的问题,这里MVC绑定到模型与列表属性忽略其他属性,这是通过使用以下代码在视图
解决<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>
@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>
...