ASP.NET MVC 2模型绑定:如何在回发后调试部分失败的模型绑定?

时间:2010-08-04 15:15:10

标签: c# asp.net-mvc-2 model-binding

我们有一个看起来像这样的视图模型:

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&lt;&gt;物业很好。

我们需要什么想法或更多信息来解决这个谜题?有没有办法测试MVC如何将表单值绑定回对象参数?解决方案是否与供应商不是IList有关,即为什么IList属性可以正常工作?

编辑:

修复是绝对指定所有字段中的对象层次结构名称,例如,对于要绑定的供应商名称,它需要名称“Contract.vendor.name”。这个前缀是使用ViewModel为我们完成的,但是没有使用Contract模型为我们完成。我们最终为所有视图模板(部分视图)执行此操作:

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

其中“Vendor”是EditorTemplate“Vendor.ascx”的名称,“Contract.vendor”是所有表单字段名称的前缀。

我猜因为ViewModel嵌套了所有数据,所以它导致MVC正确地为所有属性添加前缀。这意味着不受对象前缀限定的“松散”表单字段将不会绑定到命名参数对象。

1 个答案:

答案 0 :(得分:2)

只需下载mvc source code,执行项目参考并通过默认活页夹进行调试。