Могу ли я зарегистрировать привязку пользовательской модели где-нибудь, кроме Global.asax?
Было бы удобно ограничить область действия привязки пользовательской модели только для конкретного метода действия контроллера или всего контроллера. Хансельман написал предложение, которое подразумевало альтернативные местоположения для пользовательской регистрации подшивок моделей, но никогда не заканчивало мысль:
Вы можете назначить этот пользовательский механизм связывания ответственным за все ваши DateTimes, зарегистрировав его в Global.asax.
Можно ли сделать эти регистрации в меньшем объеме системы контроллера? Если да, есть ли причина избегать этого вне приложения Global.asax MvcApplication (например, из-за соображений производительности)?
1 ответ
Когда я закрывал вкладки, которые я открыл для этого вопроса, который я не достиг, прежде чем сдаться, я нашел кого-то с ответом. Вы можете назначить 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) { ... }