2009-04-07 18 views
7

Qualcuno ha vincolato correttamente 2 caselle di testo a una proprietà DateTime utilizzando l'associazione modello in MVC, ho provato il metodo di Scott http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx ma non era soddisfatto in quanto ciò interrompe i campi HTML e le proprietà del modello con lo stesso nome (quindi la convalida non ha potuto impostare il css corretto se non è riuscito).dateTime oggetto in ASP.NET MVC

Il mio tentativo corrente modifica questo rimuovendo l'oggetto ValueProviderResult dal bindingcontext e aggiungendo uno nuovo per la chiave composta dal risultato della data e un tiem (utilizzando la convenzione .Time nel post di Scotts) ma sono un po ' diffidare di scherzare con l'oggetto bindingContext diretto.

L'idea è che posso utilizzare IDateErrorInfo e VAB PropertyComparisonValidator per confrontare 2 datetimes sul modello dove è necessario essere più tardi dell'altro, per fare ciò è necessario includere l'elemento temporale.

risposta

3

Io uso un approccio diverso e utilizzo due diversi set di modelli: il mio modello di visualizzazione avrebbe due proprietà e la convalida per quei campi, mentre il mio modello di dominio avrebbe un DateTime. Poi, dopo la rilegatura, ho lasciato il modello vista aggiornare il 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

Mi piace questo approccio molto, ho accettato come una risposta come funziona un po 'più pulita rispetto la mia soluzione (senza pasticciare con le associazioni) – Pharabus

Problemi correlati