[英]ASP.NET MVC 2 Model Binding: How to debug a partially failed model binding on post back?
我們有一個如下所示的視圖模型:
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) { ... }
所有有效的綁定形式都將值回傳到合同參數屬性。
當我們將供應商作為值對象移至Contract時,Contract的所有第一級“原始”屬性都無法綁定。 所有IList <>屬性都可以。
有什么想法或我們需要更多信息來解決這個難題? 有什么方法可以測試MVC如何將表單值綁定回對象參數? 解決方案是否與Vendor不是IList有關,也就是說,為什么IList屬性可以正常工作?
編輯:
解決方法是在所有字段中絕對指定對象層次結構名稱,例如,要綁定供應商名稱,它需要名稱為“ Contract.vendor.name”。 此前綴是使用ViewModel為我們完成的,但不是使用Contract模型為我們完成的。 我們最終對所有視圖模板(部分視圖)執行了以下操作:
EditorFor(m => m.vendor, "Vendor", "Contract.vendor")
其中“供應商”是EditorTemplate的名稱,“ Vendor.ascx”和“ Contract.vendor”是所有表單字段名稱的前綴。
我猜是因為ViewModel嵌套了所有數據,這導致MVC正確地為所有屬性添加了前綴。 這意味着沒有對象前綴限定的“松散”表單域將不會綁定到命名參數對象。
只需下載mvc源代碼 ,進行項目參考並通過默認的資料夾進行調試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.