2010-08-04 36 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

回答