posso vedere la vostra situazione. Sto cercando altre soluzioni di convalida anche per quanto riguarda le regole di convalida complesse che potrebbero applicarsi a più di una proprietà su un dato oggetto del modello o anche molte proprietà da diversi oggetti del modello in un oggetto grafico (se sei abbastanza sfortunato da convalidare oggetti collegati come questo).
La limitazione dell'interfaccia IDataErrorInfo
è che un oggetto modello soddisfa lo stato valido semplicemente quando nessuna delle proprietà presenta errori. Ciò significa che un oggetto valido è un oggetto in cui tutte le proprietà sono anche valido. Tuttavia, potrei avere una situazione in cui se le proprietà A, B e C sono valide - allora l'intero oggetto è valido .. ma anche se la proprietà A non è valida ma B e C, allora l'oggetto soddisfa la validità. Semplicemente non ho modo di descrivere questa condizione/regola con gli attributi IDataErrorInfo
/DataAnnotations
.
Quindi ho trovato questo delegate approach. Ora molti degli utili progressi in MVC non esistevano al momento della stesura di questo articolo, ma il concetto base dovrebbe aiutarti. Anziché utilizzare gli attributi per definire le condizioni di convalida di un oggetto, creiamo funzioni delegate che convalidano requisiti più complessi e poiché sono delegati possiamo riutilizzarli. Certo è più lavoro, ma l'uso dei delegati significa che dovremmo essere in grado di scrivere il codice di una regola di validazione una volta e memorizzare tutte le regole di validazione in un unico posto (forse livello di servizio) e (il bit di kool) anche usare il MVC 2 DefaultModelBinder
per invocare la convalida automaticamente (senza accumuli di controllo nelle azioni del controller, come il blog di Scott dice che possiamo fare con DataAnnotations
. Fare riferimento a last paragraph prima dell'intestazione 'Strongly Typed UI Helpers')!Sono sicuro che si può rafforzare l'approccio suggerito nell'articolo precedente un po 'con delegati anonimi come Func<T>
o Predicate<T>
e scrivere blocchi di codice personalizzati per le regole di convalida abiliteranno le condizioni di proprietà incrociata (ad esempio la condizione che hai rinviato dove se la tua proprietà ShippingSameAsBilling
è vera, puoi ignorare più regole per l'indirizzo di spedizione, ecc.).
DataAnnotations
serve per rendere semplici le regole di convalida sugli oggetti veramente facile con pochissimo codice. Ma man mano che le tue esigenze si sviluppano, dovrai convalidare regole più complesse. I nuovi metodi virtuali nel raccoglitore modello MVC2 dovrebbero continuare a fornirci modi per integrare le nostre future invenzioni di convalida nel framework MVC.
fonte
2009-10-28 20:41:32
articolo molto utile. l'anteprima ASP.NET MVC 2 1 utilizza le annotazioni dei dati in DefaultModelBinder. tuttavia non risponde specificamente alla mia domanda, ma grazie per la pubblicazione –