2011-11-19 85 views
0

我的ViewModel中有一個名爲List<AssignablePolicy> AssignablePolicies的屬性。我想創建使用Jquery映射到此列表的項目。因此,我使用此代碼:ViewModel包含表單發佈時未綁定的列表

$('#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中得到空值。

但是當我做

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

隱藏的表單值可用。任何想法爲什麼發生這種情況?

+0

模型上的屬性是否有setter? – tvanfosson

+0

是的,這是屬性:public List AssignablePolicies {get;組; } – TCM

+0

您可能需要實際給它一個索引,因爲它是一個複合屬性,即'AssignablePolicies [0] .CompanyName'。請注意,指數需要連續。 – tvanfosson

回答

2

使用複合屬性時,需要指定每個元素的實際索引。發回時,這些需要連續(或者您需要包含一個.Index元素)。這裏有一些改編自similar answer的javascript,它將修復後期的屬性。它假設每組中的第一個輸入具有類別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; 
}); 
0

我有這樣的問題。

帶集合的模型類。該請求包含密鑰,但集合爲空。長話短說,我在控制器中添加了一個ICollection參數,讓mvc綁定數據。

看到這個步驟,也許它可以幫助你:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx。這個對我有用。但是,我是一個新手。