Crear una modelbinder, anular bindModel, comprobar el tipo y hacer lo que tiene que hacer
public class MyModelBinder
: DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
if (HasGenericTypeBase(bindingContext.ModelType, typeof(MyType<>)) {
// do your thing
}
return base.BindModel(controllerContext, bindingContext);
}
}
Indica tu carpeta de modelo a los valores predeterminados en el Global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
cheques para búsqueda de base genérica
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
Dado que esta pregunta sigue siendo bastante alta en los resultados de Google, me gustaría mencionar que tal vez una mejor solución que ha salido con MVC3 es utilizar [Model Binder Providers] (http://bradwilson.typepad.com/ blog/2010/10/service-location-pt9-model-binders.html). Esto hace que no tenga que reemplazar el cuaderno predeterminado si todo lo que está haciendo es tratar de agregar reglas especiales para vincular un tipo _particular_, lo que hace que el enlace del modelo personalizado sea mucho más escalable. –
Estaba luchando por encontrar cómo configurar el encuadernador de modelo personalizado para todos los tipos en la aplicación mvc 2. ¡Y aquí está la solución! ¡Muchas gracias! – blazkovicz