2010-08-04 78 views
0

我們有一個看起來像這樣的視圖模型:ASP.NET MVC 2模型綁定:如何調試部分失敗的模型綁定回發?

public class myViewModel { 
    public Contract contract {get;set;} 
    public Vendor vendor {get;set;} 
} 

public class Contract { 
    public int contractID {get;set;} 
    // ... various string properties 
    public IList<ContractDetail> contractDetails {get;set;} 
    pubilc Vendor vendor {get;set;} 
} 

從形式上說回是完成合同。

[HttpPost] 
public ActionResult Edit(Contract contract) { ... } 

所有工作都將表單後值綁定回合同參數屬性。

當我們將供應商作爲值對象移動到合同中時,合同的所有第一級「原始」屬性都無法綁定。所有IList <>屬性都很好。

任何想法或什麼更多的信息,我們需要解決這個謎?有沒有什麼方法可以測試MVC如何將值返回給對象參數?解決方案與供應商不是IList,即爲什麼IList屬性工作正常有關?

編輯:

此修復程序是在所有領域,例如絕對指定對象的層次結構名稱,供應商名稱進行綁定,它需要「Contract.vendor.name」的名稱。這個前綴是使用ViewModel爲我們完成的,但是我們並沒有使用Contract模型完成。最後我們這樣做對所有的視圖模板(局部視圖):

EditorFor(m => m.vendor, "Vendor", "Contract.vendor") 

其中「供應商」是EditorTemplate「Vendor.ascx」和「Contract.vendor」前綴的所有表單字段名稱的名稱。

我猜是因爲ViewModel嵌套了所有的數據,它導致MVC爲所有屬性正確前綴。這意味着,不會被對象前綴限定的「鬆散」表單字段將不會綁定到指定的參數對象。

+0

當您將供應商作爲價值對象移入合同時,您是什麼意思?你的意思是當你把'公共供應商供應商{得到;設置;}'在你的合同類? – KallDrexx 2010-08-04 15:19:39

+0

當我們將供應商從myViewModel.Vendor移至Contract.Vendor – 2010-08-04 15:45:53

回答