ViewModel包含在发布表单时未绑定的列表

时间:2011-11-19 18:41:23

标签: c# asp.net-mvc asp.net-mvc-3

我的ViewModel中有一个名为List<AssignablePolicy> AssignablePolicies的属性。我想使用Jquery创建映射到此列表的项目。所以我使用这段代码:

$('#frmPolicy').append('<input type="hidden" name="AssignablePolicies[].CompanyName" value="' + company + '"/>');

$('#frmPolicy').append('<input type="hidden" name="AssignablePolicies[].PolicyNumber" value="' + policyNumber + '"/>');

$('#frmPolicy').append('<input type="hidden" name="AssignablePolicies[].Amount" value="' + amount + '"/>');

AssignablePolicy包含CompanyName,PolicyNumber和Amount。但是,当我发布表单时,我在viewmodel中的AssignablePolicies中得到null。

但是当我做的时候

Request.Form["AssignablePolicies[].CompanyName"]

隐藏的表单值可用。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

使用复合属性时,需要指定每个元素的实际索引。回发后,这些需要连续(或者您需要包含.Index元素)。这里有一些javascript改编自similar answer,它将修复帖子上的属性。它假设每个集合中的第一个输入具有类policy-start

$('form').submit( function() {
      $('.policy-start').each( function(idx) {
          var prefix = 'AssignablePolicies[' + idx + '].';
          $(this).attr('name',prefix + 'CompanyName')
                 .next(':hidden')
                 .attr('name',prefix + 'PolicyNumber' )
                 .next(':hidden')
                 .attr('name',prefix + 'Amount' );
      });
      return true;
 });

答案 1 :(得分:0)

我有这样的问题。

带有集合的模型类。请求包含密钥但集合为空。简而言之,我在控制器中添加了一个ICollection参数,让mvc绑定数据。

请参阅此解决方案,或许它会对您有所帮助:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx。这个对我有用。但是,我是新手。