2011-11-06 12 views
5

Sto solo imparando MVC e non riesco a capire come gestire il seguente scenario, ho un modulo con un indirizzo di spedizione e un indirizzo di fatturazione. Tutti i campi sono obbligatori. C'è anche una casella di controllo per "Indirizzo di fatturazione è uguale all'indirizzo di spedizione". Il mio problema è che lo stato del modello non è mai valido a meno che non vengano completati entrambi gli indirizzi. Potrei gestirlo abbastanza facilmente con qualche javascript che ha appena aggiunto i valori dall'indirizzo di spedizione ai campi dell'indirizzo di fatturazione, ma se c'è un modo migliore per gestirlo mi piacerebbe sapere. Qualsiasi linea guida su come questo viene comunemente gestito sarebbe grandioso. Grazie!Come gestisco la convalida condizionale in MVC3?

+0

I vostri indirizzi di fatturazione e spedizione sono separati? O un modello imballato insieme? – chemicalNova

+0

Sono sullo stesso modello. Entrambe sono proprietà dello stesso tipo. – Mike

risposta

4

Ci sono molti modi per gestirlo. Se non si utilizza la convalida sul lato client, è possibile implementare semplicemente IValidatableObject sul modello e sovrascrivere il metodo IsValid() ed eseguire un codice per verificare la validità del modello.

Se si utilizza la convalida sul lato client, è necessario un attributo personalizzato o utilizzare qualcosa come fluent validation.

4

È possibile raggiungere questo obiettivo con la creazione di un attributo di convalida personalizzato:

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

L'essenza di esso è che si crea una nuova classe based off ValidationAttribute, e IClientValidatable, sostituire e implementare, se necessario, aggiungere il client- convalida laterale (che è necessario in ogni caso) e applicare l'attributo al campo facoltativo.

O poiché la convalida può essere complessa come si desidera, applicarla su un campo condiviso parzialmente facoltativo, parzialmente richiesto.

Quel ragazzo ha anche un alfa di una libreria che sta scrivendo per rendere più flessibile la convalida MVC. Non l'ho usato da solo, ma you could give it a try.

Problemi correlati