2011-06-15 9 views
53

Estoy utilizando ASP.NET MVC 3 con código primero y he agregado anotaciones de datos de validación a mis modelos. He aquí un ejemplo de modelo:Invocación manual de la validación ModelState

public class Product 
{ 
    public int ProductId { get; set; } 

    [Required(ErrorMessage = "Please enter a name")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please enter a description")] 
    [DataType(DataType.MultilineText)] 
    public string Description { get; set; } 

    [Required(ErrorMessage = "Please provide a logo")] 
    public string Logo { get; set; } 
} 

En mi página web Tengo un proceso de múltiples pasos para crear un nuevo producto - el paso 1 introduce los detalles del producto, paso 2 otra información, etc. Entre cada paso Estoy almacenando cada objeto (es decir, un objeto Producto) en la Sesión, por lo que el usuario puede volver a esa etapa del proceso y modificar los datos que ingresó.

En cada pantalla tengo validación del lado del cliente que funciona con la nueva multa de validación jQuery.

La etapa final es una pantalla de confirmación después de la cual el producto se crea en la base de datos. Sin embargo, como el usuario puede saltar de una etapa a otra, necesito validar los objetos (Producto y algunos otros) para verificar que hayan completado los datos correctamente.

¿Hay alguna manera de llamar programáticamente la validación de ModelState a un objeto que tenga anotaciones de datos? No quiero tener que pasar por cada propiedad del objeto y hacer la validación manual.

Estoy abierto a sugerencias de cómo mejorar este proceso si se hace que sea más fácil de utilizar las funciones de validación de modelos de ASP.NET MVC 3.

Respuesta

68

Usted puede llamar al método ValidateModel dentro de una acción Controller (documentation here)

+12

Gracias, utilizado TryUpdateModel() en el final, así que no tengo excepciones planteadas. –

2

Me pareció que para trabajar y hacer exactamente como se esperaba .. muestra el ValidationSummary para un objeto recién recuperado en un método de acción Se ... antes de cualquier puesto

Me.TryValidateModel(MyCompany.OrderModel) 
35

Puede utilizar ValidateModel o en TryValidateModel alcance del controlador.

Cuando se está validando un modelo, todos los validadores para todas las propiedades son plazo si al menos una entrada de formulario se une a una propiedad de modelo. El ValidateModel es como el método TryValidateModel excepto que el método TryValidateModel no arroja una excepción InvalidOperationException si falla la validación del modelo.

ValidateModel - lanza una excepción si el modelo no es válido.

TryValidateModel - devuelve el valor de bool que indica si el modelo es válido.

Si valida una lista de modelos uno por uno , que se desea restablecer ModelState para cada iteración llamando ModelState.Clear().

Link to MSDN

+0

Tengo un campo obligatorio que es nulo y se utiliza "ModelState.Clear()" y ModelState.IsValid es verdadero. –

+1

Funciona cuando pongo "ModelState.Clear();" y "TryValidateModel (myModel);".Gracias –

+0

Esto puede parecer obvio después de pensarlo, pero su método 'Validate' personalizado no se llamará ** si hay algún error de validación dentro de los atributos de validación. – Jess

Cuestiones relacionadas