2010-05-04 10 views
8

En utilisant MVC2, j'ai un ViewModel simple qui contient un champ bool qui est rendu sur la vue comme une case à cocher. Je voudrais valider que l'utilisateur a coché la case. L'attribut [Obligatoire] sur mon ViewModel ne semble pas faire l'affaire. Je crois que c'est parce que le champ de case à cocher non coché n'est pas réellement retransmis pendant le POST, et donc la validation ne fonctionne pas dessus.Comment valider une case à cocher dans ASP.Net MVC 2?

Existe-t-il un moyen standard de gérer la validation «requise» de la case à cocher dans MVC2? ou dois-je écrire un validateur personnalisé pour cela? Je soupçonne que le validateur personnalisé ne sera pas exécuté pour la raison mentionnée ci-dessus. Suis-je coincé vérifier explicitement dans mon contrôleur? Cela semble désordonné ...

N'importe quelle direction serait appréciée.

Scott

MODIF.NUMERO CLARITY: Comme il est indiqué dans les commentaires ci-dessous, c'est un « accord à nos conditions » type de case à cocher, et donc « non cochée » est une réponse valable, donc je suis vraiment à la recherche pour une validation "is checked".

+1

Est-ce un type de case à cocher "J'accepte les termes du contrat de licence"? L'attribut [Obligatoire] ne fonctionne pas car une case non cochée est une valeur valide (false). –

+0

Oui, c'est exactement cela, et s'ils ne le vérifient pas, nous ne faisons que réafficher la même vue avec un message de validation que vous devez accepter les termes pour continuer. Je vois votre point de vue sur le faux être "valide" cependant. –

+0

La réponse ici a une bonne façon de le faire qui fonctionne avec les validateurs clients: [http://stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate](http stackoverflow.com/questions/4934032/mvc3-make-checkbox-required-via-jquery-validate) –

Répondre

13

un validateur personnalisé est le chemin à parcourir. Je posterai mon code que j'ai utilisé pour valider que l'utilisateur accepte les termes ...

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

Cela valide-t-il également le côté client? – jrummell

+0

pas automatiquement comme je sais. Afin de créer une validation côté client, vous devez créer un validateur pour la validation personnalisée. voir le lien suivant pour plus de détails sur la façon de mettre en œuvre cette: http://www.highoncoding.com/Articles/729_Creating_Custom_Client_Side_Validation_in_ASP_NET_MVC_2_0.aspx Vous devez créer un DataAnnotationsModelValidator pour la validation personnalisée – SQueek

0

Je suis trop à la recherche d'un moyen d'avoir le modèle de liaison gérer correctement des cases à cocher avec des valeurs booléennes. En attendant je l'utilise dans les Actions:

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

Peut-être que cela vous sera utile.

12

J'utilise habituellement:

[RegularExpression("true")] 
+2

J'aime celui-ci, bien que je devais modifier c'est ceci: '[RegularExpression (" true | true ")]' pour que cela fonctionne pour moi. (J'utilise MVC3, si cela fait une différence?) – Merenzo

+0

cela vous a-t-il donné la validation côté client? eu le côté serveur correctement – Shekhar

6

Si vous ne voulez pas créer votre propre validateur personnalisé et voulait toujours utiliser des attributs existants dans le modèle que vous pouvez utiliser:

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

Cela garantit que la plage de la valeur booléenne est entre vrai et vrai. Cependant, bien que cette méthode fonctionne, je préférerais toujours utiliser un validateur personnalisé dans ce scénario. Je pensais juste que je mentionnerais ceci comme une option alternative.

Questions connexes