如何将动态对象列表绑定到Model

时间:2012-06-20 23:47:54

标签: asp.net-mvc data-binding

我有一个强类型视图,其中传入的模型的一个属性是一个对象列表。我正在使用BeginCollectionItem帮助程序处理输入到此列表的动态绑定,该帮助程序正常工作。但是,我还想在视图中看到一组输入,这些输入将绑定到列表中的“第一个”对象。

我尝试过只复制BeginCollectionItem生成的输入,但这似乎不起作用。

它生成具有名称属性的输入,如

invoiceItems[ef43a8f2-c6b7-4791-bf7f-6764c8e3fc9b].Description
invoiceItems[ef43a8f2-c6b7-4791-bf7f-6764c8e3fc9b].Cost

所以我在名为属性

的视图上手动输入2个输入
invoiceItems[firstOne].Description 
invoiceItems[firstOne].Cost

但是在提交表单后它没有出现在控制器的模型中。

我不能在视图加载时插入一个BeginCollectionItem方法,因为初始项必须以不同方式显示。

2 个答案:

答案 0 :(得分:1)

不完全回答您的问题,但我希望它能解决您的问题

您可以尝试更改模型,而不是更改视图中的名称。添加boolean属性IsFirst。我相信你知道controller(或模型被实例化的地方)哪一个是第一个。将第一项IsFirst设置为true。

答案 1 :(得分:0)

我明白了。我是在正确的轨道上手动输入BeginCollectionItem做的东西,我只是错过了一个部分。您需要另一个隐藏的输入来告诉绑定您正在使用的索引是什么。

所以以下工作完美

<input type="hidden" name="invoiceItems.index" autocomplete="off" value="firstOne" />
<input type="text" placeholder = "ex. Labour" id="invoiceItems_firstOne__Description" name="invoiceItems[firstOne].Description" />
<input type="text" placeholder = "ex. $15" id="invoiceItems_firstOne__Cost" name="invoiceItems[firstOne].Cost" />

我刚刚将最隐藏的输入添加到我以前所拥有的内容中,这一切都很好。