代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

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

  •  0
  • Zachary Scott  · 技术社区  · 14 年前

    我们有一个这样的视图模型:

    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) { ... }
    

    所有工作都将表单post值绑定回合同参数属性。

    当我们将供应商作为值对象移入契约时,契约的所有第一级“原始”属性都无法绑定。所有的IList<gt;属性都很好。

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

    编辑:

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

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

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   redsquare    14 年前

    只需下载 mvc source code ,执行项目引用并通过默认绑定器进行调试。