【发布时间】:2011-06-20 08:23:16
【问题描述】:
我一直在阅读MVC 3 source code,试图了解如果我重写 DefaultModelBinder.BindModel() 甚至实现 IModelBinder.BindModel() 应该遵循什么语义。
我不清楚 BindModel() 完成工作后应该将其他对象保留在什么“状态”中。当然,假设它返回一个代表对 ValueProvider 数据的某种解释的值,但是它应该有什么副作用呢?例如:
- MVC 是否对 *after* 方法完成后传递给 BindModel() 的 bindingContext 的状态有期望?
- 如果有的话,IModelBinder.BindModel() 应该在 ModelMetadata 中设置什么? (DefaultModelBinder 在其 BindProperty() 方法中设置属性元数据,由 BindModel() 调用。)
- 是否应该覆盖 DefaultModelBinder.BindModel() 调用 ModelState.AddModelError(),或者是 BindProperty() 覆盖更合适的地方(尤其是如果我想尽可能利用 DefaultModelBinder 的默认行为)?李>
DefaultModelBinder 在其管道中内置了如此多的语义,以至于覆盖任何感觉非常危险的东西(即,我觉得如果不违反 Liskov principle 就无法覆盖任何东西)。缺乏文档也无济于事。
【问题讨论】:
标签: model-view-controller asp.net-mvc-3 model-binding defaultmodelbinder