tengo una estructura personalizada llamada TimeOfDay
que se utiliza en un modelo vista como esta:modelo personalizado ligante no se llama cuando el tipo es anulable
public class MyViewModel
{
public TimeOfDay TimeOfDay { get; set; }
}
He creado una carpeta de modelo personalizado llamado TimeOfDayModelBinder
y registrada en Global .asax.cs como este:
ModelBinders.Binders.Add(typeof(TimeOfDay), new TimeOfDayModelBinder());
Y todo funciona genial. Sin embargo, si cambio mi modelo de vista a este:
public class MyViewModel
{
public TimeOfDay? TimeOfDay { get; set; } // Now nullable!
}
Mi carpeta de modelo personalizado ya no se llama. Sé que la propiedad ya no es un tipo de TimeOfDay, sino un Nullable que es diferente. Entonces esto significa que debo añadir mi carpeta modelo personalizado en dos ocasiones en Global.asax.cs así:
ModelBinders.Binders.Add(typeof(TimeOfDay), new TimeOfDayModelBinder());
ModelBinders.Binders.Add(typeof(TimeOfDay?), new TimeOfDayModelBinder());
Funciona, pero no es sólo algo que no me gusta de ella. ¿Es esto realmente necesario para manejar mi tipo como nullable, o hay algo que me falta?
No creo que te falte nada. Por lo que sé, esa es la forma estándar de hacerlo. – LukeH
¿Alguna vez resolvió esto? Tengo un problema similar (pero no del todo). Ver [mi pregunta] (http://stackoverflow.com/questions/5519548/). – notJim
@notJim No profundicé mucho más, pero la conclusión fue que necesitaba agregar el encuadernador dos veces. Una vez para las que no admiten nulos y una para las que aceptan nulos, ya que en realidad son dos tipos diferentes de la CLR. –