我可以在 Global.asax 以外的地方注册自定义模型绑定程序吗?
-
27-09-2019 - |
题
将自定义模型绑定器的范围限制为特定控制器操作方法或其整个控制器会很方便。 汉塞尔曼 写了一句话,暗示自定义模型活页夹注册的替代位置,但似乎从未完成这个想法:
你可以 任何一个 通过在 Global.asax 中注册此自定义模型绑定器来负责所有日期时间
是否可以在控制器系统的较小范围内进行这些注册?如果是这样,是否有任何理由避免在 Global.asax MvcApplication 之外这样做(例如,性能原因)?
解决方案
当我关闭为这个问题打开的选项卡时,我在放弃之前没有到达过,我发现 有答案的人. 。您可以分配一个 ModelBinderAttribute
到您的视图模型:
[ModelBinder(typeof(SomeEditorModelModelBinder))]
public class SomeEditorModel {
// display model goes here
}
public class SomeEditorModelModelBinder : DefaultModelBinder {
// custom model binder for said model goes here
}
虽然它并不完全是我想要的,但它比为控制器或控制器方法注册它更具体。
更新
感谢李维的评论指出了一个更好的解决方案。如果您直接在 MVC 操作方法中使用自定义模型绑定器使用对象,则可以简单地使用 ModelBinder
财产。
public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }
不隶属于 StackOverflow