2011-11-06 23 views
5

Estoy recién aprendiendo MVC y parece que no puedo entender cómo manejar la siguiente situación, tengo un formulario con una dirección de envío y una dirección de facturación. Todos los campos son obligatorios. También hay una casilla de verificación para "La dirección de facturación es la misma que la dirección de envío". Mi problema es que el estado del modelo nunca es válido a menos que se completen ambas direcciones. Podría manejar esto bastante fácilmente con algunos javascript que solo agregan los valores de la dirección de envío a los campos de dirección de facturación, pero si hay una forma mejor de manejar esto, me gustaría saberlo. Cualquier línea de guía sobre cómo esto se maneja comúnmente sería genial. ¡Gracias!¿Cómo manejo la validación condicional en MVC3?

+0

¿Sus direcciones de facturación y envío son independientes? O un modelo empaquetado? – chemicalNova

+0

Están en el mismo modelo. Ambas son propiedades del mismo tipo. – Mike

Respuesta

4

Hay muchas maneras de manejar esto. Si no está utilizando la validación del lado del cliente, simplemente puede implementar IValidatableObject en el modelo y anular el método IsValid() y hacer algún código para verificar la validez del modelo.

Si está utilizando la validación del lado del cliente, entonces necesita un atributo personalizado, o use algo como fluent validation.

4

Usted puede lograr esto mediante la creación de un atributo de validación personalizada:

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

El quid de la cuestión es que se crea una nueva clase based off ValidationAttribute y IClientValidatable, sustituir e implementar si es necesario, añada su cliente- Validación lateral (que de todos modos necesita) y aplique el atributo a su campo opcional.

O, como la validación puede ser tan compleja como desee, aplíquela en un campo parcialmente compartido opcional y parcialmente compartido.

Ese tipo también tiene un alfa de una biblioteca que está escribiendo para hacer que la validación de MVC sea más flexible. No lo he usado yo mismo, pero you could give it a try.

Cuestiones relacionadas