Modèle MVC exiger vrai
Est-il un moyen par le biais d'annotations de données pour exiger qu'une propriété booléenne être défini à true?
public class MyAwesomeObj{
public bool ThisMustBeTrue{get;set;}
}
- Quel est exactement le cas d'utilisation de ce? Ne pouvais pas vous laissez le bien-être en lecture seule et retourner vrai tout le temps?
- Il est assez grand chose à dire... hé, mon pote, vous avez oublié de vérifier la je suis d'accord... ce qui devrait rendre le modèle non valide.
- Je pense que c'est quelque chose que vous aimeriez poignée côté client.
- Il doit être manipulé sur les deux côtés... et pas seulement du côté client. Je viens de regarder pour voir si il pourrait être géré par l'ajout d'une simple annotation de données.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer votre propre programme de validation:
return (bool) value == true;
c'est redondant de comparaisonJe voudrais créer un validateur pour à la fois côté Serveur ET Client. En utilisant MVC et discrète de la validation du formulaire, cela peut être réalisé simplement en procédant de la manière suivante:
Tout d'abord, créer une classe dans votre projet pour effectuer le côté serveur de validation de la sorte:
Suite à cela, d'annoter la propriété appropriée dans votre modèle:
Et Enfin, permettre la validation côté client en ajoutant le script suivant à votre Vue:
Remarque: Nous avons déjà créé une méthode
GetClientValidationRules
qui pousse notre commentaire à la vue de notre modèle.Si vous utilisez des fichiers de ressources pour fournir le message d'erreur pour l'internationalisation, la suppression de la
FormatErrorMessage
appel (ou il suffit d'appeler la base) et de modifier lesGetClientValidationRules
méthode comme suit:Je sais que c'est un vieux post, mais je voulais partager un simple serveur de côté façon de le faire. Vous créez un public bien défini à true, et de comparer à votre bool pour cette propriété. Si votre bool n'est pas cochée (par défaut false) le formulaire ne sera pas validé.
J'ai essayé plusieurs solutions mais aucune n'a fonctionné complètement pour moi d'obtenir à la fois côté client et serveur de validation. Donc, ce que j'ai fait dans mon MVC 5 application pour le faire fonctionner:
Dans votre ViewModel (pour le côté serveur de validation):
Dans votre Rasoir page (pour la validation côté client):
Je voudrais juste demander aux gens de la suite de Violon: https://dotnetfiddle.net/JbPh0X
L'utilisateur ajouté
[Range(typeof(bool), "true", "true", ErrorMessage = "You gotta tick the box!")]
à leur propriété booléenne qui provoque côté serveur de validation de travailler.Afin d'avoir aussi le côté client de la validation de travail, ils ont ajouté le script suivant:
Juste vérifier pour voir si sa représentation sous forme de chaîne est égale à
True
:RegularExpressionAttribute
utilise en interneConvert.ToString
pour obtenir la représentation de chaîne de la valeur de la propriété (qui est livrée à elle comme unobject
).Vous pouvez soit créer votre propre attribut ou de l'utilisation de la CustomValidationAttribute.
Voici comment vous pouvez utiliser le CustomValidationAttribute:
où BoolValidation est défini comme:
[Required]
attribut représente nécessitant tout valeur, il peut être vrai ou faux. Vous auriez à utiliser une autre validation pour que.Avez-vous le des éléments mis en place dans le web.config?
Qui pourrait entraîner la validation de ne pas travailler.
Vous pouvez également essayer de créer une validation personnalisée attribut (depuis
[Required]
seulement se soucie de savoir si il existe ou pas, et vous vous souciez de la valeur):Puis, utilisation:
De ici.
Pour ASP.NET Core, MVC voici validation client et serveur, basée sur dazbradbury la solution de
Puis sur le client:
Alors d'usage:
La suite sur le post de ta.speot.est et le commentaire de Jerad Rose:
La poste donné ne fonctionnera pas côté client avec discrète de validation.
Cela devrait fonctionner dans les deux camps (client & server):
Je ne sais pas d'un chemin à travers DataAnnotations, mais c'est facile à faire dans votre contrôleur.
La seule autre option serait de construire un validateur personnalisé pour la partie serveur et une distance validateur pour le côté client (validation à distance n'est disponible que dans MVC3+)
C'est ce qui a fonctionné pour moi. Rien d'autre a fait. Mvc 5:
Modèle
Vue
Je pense que la meilleure façon de gérer cela est juste vérifier dans votre contrôleur si la case est vrai sinon il suffit d'ajouter une erreur à votre modèle et l'ont réafficher votre point de vue.
Comme dit précédemment, tous les [Obligatoire] n'est assurez-vous qu'il est une valeur et, dans votre cas, pas cochée, vous obtenez toujours faux.
Découvrez toute épreuve de validation ici. Vous pouvez télécharger/installer via Nuget.
C'est une grande bibliothèque de peu pour ce genre de chose.