2009-04-07 28 views
7

Alguien ha vinculado con éxito 2 cuadros de texto a una propiedad DateTime usando el enlace de modelo en MVC, probé el método de Scott http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx pero no estaba satisfecho ya que esto detiene los campos HTML y las propiedades del modelo con el mismo nombre (la validación no pudo establecer el CSS correcto si falló).objeto dateTime en ASP.NET MVC

Mi intento actual lo modifica quitando el objeto ValueProviderResult del bindingcontext y agregando uno nuevo para la clave formada a partir del resultado de la fecha y un tiem (usando la convención .Time en la publicación de Scotts) pero estoy un poco cuidado de jugar con el objeto bindingContext directo.

La idea es que puedo usar IDateErrorInfo y VAB PropertyComparisonValidator para comparar 2 fechas en el modelo donde uno tiene que ser más tarde que el otro, para hacer esto, el elemento de tiempo necesita ser incluido.

Respuesta

3

Uso un enfoque diferente y opto por dos conjuntos diferentes de modelos: Mi modelo de vista tendría dos propiedades y la validación de esos campos, mientras que mi modelo de dominio tendría un DateTime. A continuación, después de la unión, dejo que la actualización del modelo de vista del dominio:

public ActionResult Update(DateInput date) 
{ 
    if(date.IsValid) 
    { 
     var domain = someRepository.GetDomainObject(); // not exactly, but you get the idea. 
     date.Update(domain); 
    } 
    // ... 
} 

public class DateInput 
{ 
    public string Date { get; set; } 
    public string Time { get; set; } 

    public void Update(DomainObject domain) { ... } 
} 

public class DomainObject 
{ 
    public DateTime SomePointInTime { get; set; } 
} 
+0

me gusta este enfoque mucho, lo he aceptado como una respuesta, ya que funciona un poco más limpio que mi solución (sin perder el tiempo con fijaciones) – Pharabus