2010-05-04 12 views
8

Al usar MVC2, tengo un modelo de vista simple que contiene un campo bool que se representa en la vista como una casilla de verificación. Me gustaría validar que el usuario marcó la casilla. El atributo [Requerido] en mi ViewModel no parece ser el truco. Creo que esto se debe a que el campo de formulario de casilla de verificación no revisado no se transmite realmente durante el POST y, por lo tanto, la validación no se ejecuta en él.¿Cómo se valida una casilla de verificación en ASP.Net MVC 2?

¿Existe una forma estándar de manejar la validación "requerida" de casilla de verificación en MVC2? o tengo que escribir un validador personalizado para eso? Sospecho que el validador personalizado tampoco se ejecutará por el motivo mencionado anteriormente. ¿Estoy atrapado comprobando explícitamente en mi controlador? Eso parece desordenado ...

Cualquier orientación sería apreciada.

de Scott

EDITAR para mayor claridad: Como se ha señalado en los comentarios a continuación, se trata de un tipo "de acuerdo con nuestros términos" de la casilla, y por lo tanto "no controlada" es una respuesta válida, por lo que estoy realmente esperando para una validación "se verifica".

+1

¿Es esta una casilla de verificación "Acepto los términos del acuerdo de licencia"? El atributo [Requerido] no funciona porque una casilla de verificación no seleccionada es un valor válido (falso). –

+0

Sí, es exactamente eso, y si no lo comprueban, solo estamos redistribuyendo la misma vista con un mensaje de validación que debe aceptar los términos para continuar. Sin embargo, veo que tu punto acerca de la falsedad es "válido". –

+0

La respuesta aquí tiene una buena forma de hacerlo que funciona con los validadores del cliente: [http://stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate](http:// stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate) –

Respuesta

13

un validador personalizado es el camino a seguir. Voy a publicar mi código que he utilizado para validar que el usuario acepta los términos ...

public class BooleanRequiredToBeTrueAttribute : RequiredAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     return value != null && (bool)value; 
    } 
} 
+0

¿Esto valida el lado del cliente también? – jrummell

+0

no automáticamente como yo sé. Para crear una validación del lado del cliente, debe crear un validador para la validación personalizada. véase el siguiente enlace para obtener más información sobre cómo implementar esto: http://www.highoncoding.com/Articles/729_Creating_Custom_Client_Side_Validation_in_ASP_NET_MVC_2_0.aspx usted tiene que crear un DataAnnotationsModelValidator para la validación personalizada – SQueek

0

yo también estoy buscando una manera de tener el ligante modelo de manejar correctamente las casillas de verificación con valores booleanos. Por el momento estoy usando esto en las acciones:

Object.Property = !String.IsNullOrEmpty(Request.Form["NAME"]); 

Tal vez este sea de alguna utilidad para ti.

12

que suelen utilizar:

[RegularExpression("true")] 
+2

me gusta éste, aunque tuve que retocar esto: '[RegularExpression (" true | True ")]' para que funcione para mí. (Estoy usando MVC3, si eso hace la diferencia?) – Merenzo

+0

¿Le dio validación del lado del cliente también? consiguió el lado del servidor correctamente – Shekhar

6

Si no desea crear su propio validador personalizado y todavía quería utilizar atributos existentes en el modelo se puede utilizar:

[Range(typeof(bool), "true", "true", ErrorMessage="You must accept the terms and conditions.")] 

Esto asegura que el rango del valor booleano se encuentra entre verdadero y verdadero. Sin embargo, aunque este método funcionará, aún preferiría usar un validador personalizado en este escenario. Solo pensé en mencionar esto como una opción alternativa.

Cuestiones relacionadas