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

pat*_*dge 5 custom-model-binder asp.net-mvc-2

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

你可以要么把这个自定义的模型绑定负责所有DateTime是否通过在Global.asax它注册

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

pat*_*dge 6

当我关闭标签时,我打开了这个问题,这是我在放弃之前没有达到的,我找到了一个有答案的人.您可以ModelBinderAttribute为视图模型指定一个:

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

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

更新

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

public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }
Run Code Online (Sandbox Code Playgroud)

  • 您还可以将[ModelBinder(typeof(...))]直接粘贴到action方法的参数上,指定的binder将用于该特定参数. (3认同)