我可以在Global.asax以外的地方注册自定义模型绑定器吗?

时间:2010-06-14 21:56:44

标签: asp.net-mvc-2 custom-model-binder

仅为特定控制器操作方法或其整个控制器限制自定义模型绑定器的范围会很方便。 Hanselman写了一句话,暗示了自定义模型绑定器注册的替代位置,但似乎从未完成这个想法:

  

您可以 通过在Global.asax中注册此自定义模型Binder来管理所有日期时间

是否可以在较小的控制器系统范围内进行这些注册?如果是这样,有没有理由在Global.asax MvcApplication之外避免这样做(例如,性能原因)?

1 个答案:

答案 0 :(得分:6)

当我关闭我为放弃这个问题而打开的标签时,我发现someone with an answer。您可以为视图模型指定ModelBinderAttribute

[ModelBinder(typeof(SomeEditorModelModelBinder))]
public class SomeEditorModel {
    // display model goes here
}
public class SomeEditorModelModelBinder : DefaultModelBinder {
    // custom model binder for said model goes here
}

虽然它不是我想要的,但它比为控制器或控制器方法注册它更具体。

更新

感谢Levi的评论指出了一个更好的解决方案。如果直接在MVC操作方法中使用自定义模型绑定器来使用该对象,则可以使用ModelBinder属性简单地修饰该方法的参数。

public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }