2011-11-03 35 views
3

菲尔哈克有介绍如何设置的东西,所以默认模型绑定将绑定到一个集合上回发了一篇文章:如何获得上回发的视图模型子集合在MVC3?

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的列表是空的。我怎样才能让他们回来?菲尔的文章没有帮助那里。

@model MyViewModel 
@using (Html.BeginForm()) 
{ 
    ... some input fields 

    @Html.EditorFor(x => x.OrderItemViewModels) 

    <input type="submit" value="OK" /> 
} 

,然后相应的编辑器模板,将里面:

回答

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

我给你竖起大拇指的这一点,因为它本质上是正确的答案。我了解到,它是HTML Input元素的Name属性。它必须是在一定的格式(如其他线程显示),以便模型绑定弄明白。以及您的具体答案是正确的(我不得不处理下拉框,不得不手动覆盖Name属性来得到这个工作) –

+0

谢谢!花了太多时间找到这个答案,我希望更多的人+1。 – jhilden

1

使用编辑模板解决了类似的问题自动输出呈现为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> 
... 
+0

达林,这不太有效,因为单个项目上的命名不适合数据绑定到参数。 –

相关问题