簡體   English   中英

ASP.NET MVC 2模型綁定:如何在回發時調試部分失敗的模型綁定?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM