BindModel()实现应该做什么?

时间:2011-02-02 23:24:16

标签: model-view-controller asp.net-mvc-3 model-binding defaultmodelbinder

如果我覆盖DefaultModelBinder.BindModel()甚至实现IModelBinder.BindModel(),我一直在阅读MVC 3 source code试图理解我应该遵循的语义。

我不清楚“状态”BindModel()应该在完成其工作后留下其他对象。当然,它假设返回一个表示ValueProvider数据的一些解释的值,但它应该具有哪些副作用?例如:

  • 在方法完成后,MVC是否对传递给BindModel()*的bindingContext的状态有所期待?
  • 在ModelMetadata中设置IModelBinder.BindModel()有什么用途? (DefaultModelBinder在其BindProperty()方法中设置属性元数据,由BindModel()调用。)
  • 应该重写DefaultModelBinder.BindModel()调用ModelState.AddModelError(),还是BindProperty()覆盖一个更合适的位置(特别是如果我想尽可能利用DefaultModelBinder的默认行为)?

DefaultModelBinder在其管道中内置了如此多的语义,它会覆盖任何感觉非常危险的东西(即我觉得我不能在不违反Liskov principle的情况下覆盖任何内容)。缺乏文档无济于事。

1 个答案:

答案 0 :(得分:0)

如果你需要自定义绑定,我会实现IModelBinder接口并执行构建对象所需的操作。