Application de la valeur booléenne d’un modèle à la valeur true à l’aide d’annotations de données

Simple problème ici (je pense).

J’ai un formulaire avec une case à cocher en bas où l’utilisateur doit accepter les termes et conditions. Si l’utilisateur ne coche pas la case, j’aimerais qu’un message d’erreur s’affiche dans mon récapitulatif de validation avec les autres erreurs de formulaire.

J’ai ajouté ceci à mon modèle de vue:

[Required] [Range(1, 1, ErrorMessage = "You must agree to the Terms and Conditions")] public bool AgreeTerms { get; set; } 

Mais ça n’a pas marché.

Existe-t-il un moyen simple de forcer une valeur à être vraie avec des annotations de données?

 using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using System.Web.Mvc; namespace Checked.Entitites { public class BooleanRequiredAtsortingbute : ValidationAtsortingbute, IClientValidatable { public override bool IsValid(object value) { return value != null && (bool)value == true; } public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { //return new ModelClientValidationRule[] { new ModelClientValidationRule() { ValidationType = "booleanrequired", ErrorMessage = this.ErrorMessage } }; yield return new ModelClientValidationRule() { ValidationType = "booleanrequired", ErrorMessage = this.ErrorMessageSsortingng }; } } } 

Vous pouvez écrire un atsortingbut de validation personnalisé qui a déjà été mentionné. Vous devrez écrire du code javascript personnalisé pour activer la fonctionnalité de validation non intrusive afin de le récupérer si vous effectuez une validation côté client. Par exemple, si vous utilisez jQuery:

 // extend jquery unobtrusive validation (function ($) { // add the validator for the boolean atsortingbute $.validator.addMethod( "booleanrequired", function (value, element, params) { // value: the value entered into the input // element: the element being validated // params: the parameters specified in the unobtrusive adapter // do your validation here an return true or false }); // you then need to hook the custom validation atsortingbute into the MS unobtrusive validators $.validator.unobtrusive.adapters.add( "booleanrequired", // adapter name ["booleanrequired"], // the names for the properties on the object that will be passed to the validator method function(options) { // set the properties for the validator method options.rules["booleanRequired"] = options.params; // set the message to output if validation fails options.messages["booleanRequired] = options.message; }); } (jQuery)); 

Une autre façon (ce qui est un peu un hack et je ne l’aime pas) consiste à avoir une propriété sur votre modèle toujours définie sur true, puis utilisez l’ outil CompareAtsortingbute pour comparer la valeur de votre atsortingbut * AgreeTerms * . Simple oui mais je n’aime pas ça 🙂