2014-03-05 109 views
0

我想在我的MVC應用程序上的輸入上創建一個負載,由MVC模型綁定器拾取以填充我的視圖模型。它不工作,我不知道爲什麼。MVC和淘汰賽模型綁定

這裏是淘汰賽的片段與我希望創建的輸入,模型綁定回暖:

 <div data-bind="foreach: witnesses"> 
      <input data-bind="attr: { name: 'Witnesses[' + $index() + '].firstName', value: firstName}" /> 
      <input data-bind="attr: { name: 'Witnesses[' + $index() + '].lastName', value: lastName}" /> 
      <!-- more fields here --> 
     </div> 

這裏是C#視圖模型的片段:

public class GraffitiViewModel 
{ 
    // view model 
    public List<Witness> Witnesses; 
} 

public class Witness 
{ 
    public string firstName { get; set;} 
    public string lastName { get; set; } 
    public string telephone { get; set; } 
    public string email { get; set; } 
    public string propertyNameNumber { get; set; } 
    public string street { get; set; } 
    public string postcode { get; set; } 
} 

輸入已成功傳遞到Request.Form中的服務器,但它們不綁定到視圖模型。任何人有任何想法爲什麼?我唯一的選擇是通過MVC源代碼來找出模型綁定發生的位置以及爲什麼它不起作用。

馬克

+1

「證人」應該也是一個財產! '公共課GraffitiViewModel { //查看模型 公開列表 Witnesses {get;組; } }' – nemesv

+0

attr綁定部分很好'attr:{name:'Witnesses ['+ $ index()+'] .firstName'你可以嘗試改回它,因爲你的'Witnesses'是一個屬性? – nemesv

+0

我做了,但沒有奏效。 – serlingpa

回答

-1

我認爲你正試圖通過此設置name屬性的證人['+ $指數()+「] .firstName。 所以你可以使用它與$父母的第一件事,而不是這個,你可以直接使用propery名稱。正如@nemesv所建議的,首先讓目擊者成爲一個財產。

<div data-bind="foreach: witnesses"> 
    <input data-bind="attr: { name: $parent.witnesses()[$index()].firstName, value: firstName}" /> 
    <input data-bind="attr: { name: $parent.witnesses()[$index()].lastName, value: lastName}" /> 
<!-- more fields here --> 
</div> 

http://jsfiddle.net/J3Yze/

+1

我已修改我的代碼,使其看起來像上面,我已將證人字段更改爲屬性。儘管如此,我仍然無法在我的Witnesses物業上收到回覆。有任何想法嗎?另外,$ parent和$ index的文檔在哪裏? – serlingpa

+0

找到文檔!遺憾的淘汰賽網站沒有搜索 – serlingpa

0

嗨你nemesv和alklesh

我的視圖模型現在已經成功地結合,感謝您的幫助。建議的語法不起作用,所以我回到:

<input data-bind="attr: { name: 'Witnesses[' + $index() + '].firstName', value: firstName}" /> 

這不是很漂亮,但它的工作,所以我很高興。我可能會重新審視它,並嘗試使它更整潔,但我現在已經花了足夠的時間,所以我正在繼續前進。

再次感謝您的幫助。

馬克