【问题标题】:What should a BindModel() implementation do?BindModel() 实现应该做什么?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2012-01-28
      • 2017-03-09
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多