¿Puedo registrar un modelo de carpeta de encargo en otro lugar que Global.asax?
-
27-09-2019 - |
Pregunta
Sería útil para limitar el alcance de un aglutinante modelo personalizado por sólo un método de acción del controlador específico o la totalidad de su controlador. Hanselman escribió una frase que implicaba lugares alternativos para el registro de aglutinante modelo personalizado, pero nunca parecía terminar el pensamiento:
Puede o bien Carpeta poner este modelo personalizado a cargo de todas sus DateTime mediante su registro en el Global.asax
¿Es posible hacer que estos registros a un menor alcance del sistema de control? Si es así, ¿hay alguna razón para no tener que hacerlo fuera del Global.asax MvcApplication (por ejemplo, razones de rendimiento)?
Solución
A medida que iba a cerrar las pestañas que se abrió para esta pregunta que yo no había alcanzado antes de renunciar, he encontrado alguien con una respuesta . Se puede asignar un ModelBinderAttribute
a sus modelos de vista:
[ModelBinder(typeof(SomeEditorModelModelBinder))]
public class SomeEditorModel {
// display model goes here
}
public class SomeEditorModelModelBinder : DefaultModelBinder {
// custom model binder for said model goes here
}
A pesar de que no era lo que estaba buscando, es aún más específico que registrarlo para un método de controlador o controlador.
Actualizar
Gracias al comentario de Levi señalando una solución mucho mejor. Si usted está consumiendo el objeto con un aglutinante modelo personalizado en un método de acción directa MVC, puede simplemente decorar parámetro de este método con la propiedad ModelBinder
.
public ActionResult SomeMethod([ModelBinder(typeof(SomeEditorModelBinder))]SomeEditorModel model) { ... }