我们有一个看起来像这样的视图模型: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为所有属性正确前缀。这意味着,不会被对象前缀限定的“松散”表单字段将不会绑定到指定的参数对象。
当您将供应商作为价值对象移入合同时,您是什么意思?你的意思是当你把'公共供应商供应商{得到;设置;}'在你的合同类? – KallDrexx 2010-08-04 15:19:39
当我们将供应商从myViewModel.Vendor移至Contract.Vendor – 2010-08-04 15:45:53