web-dev-qa-db-fra.com

Comment ajouter un attribut obligatoire booléen dans MVC?

J'ai une classe modèle comme:

public class Student
{
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    [Display(Name = "Enrollment Date")]
    public DateTime EnrollmentDate { get; set; }

    [Required]
    [Display(Name = "Is Active")]
    public bool IsActive { get; set; }

    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

Ici, j'ai créé une propriété BooleanIsActive avec un attribut Required, mais le problème est que mon affichage n'exécute pas la validation requise pour cette propriété? Je veux lier cette propriété avec une CheckBox et vérifier si cette CheckBox est cochée et exécuter la validation si ce n'est pas le cas.

Une solution pour cela?

28
Sonu K
[Display(Name = "Is Active")]
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")]
public bool IsActive { get; set; }
52
Sonu K

Merci pour la solution ci-dessus, qui m'a mis dans la bonne direction, mais pour moi cela n'a pas bien fonctionné. J'ai besoin d'ajouter le script ci-dessous à la page qui étend le validateur JQuery pour que la solution ci-dessus fonctionne. Penser à partager cela si quelqu'un se heurte à un problème similaire.

<script>
        // extend jquery range validator to work for required checkboxes
        var defaultRangeValidator = $.validator.methods.range;
        $.validator.methods.range = function(value, element, param) {
            if(element.type === 'checkbox') {
                // if it's a checkbox return true if it is checked
                return element.checked;
            } else {
                // otherwise run the default validation function
                return defaultRangeValidator.call(this, value, element, param);
            }
        }
</script>
20
Kris

Laissez-moi ajouter un peu à Sonu K post

Si vous utilisez la validation HTML sur celui-ci (<input type="checkbox" required/>), cela pourrait empêcher votre javascript de vous empêcher de soumettre un ensemble de champs requis vide à partir de votre modèle.

Enfin, si vous ne voulez pas que le Is Active soit ajouté à la base de données lors de la migration (Code en premier), ajoutez simplement [NotMapped]

Code complet

[NotMapped]
[Display(Name = "Is Active")]
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")]
public bool IsActive { get; set; }

car il est défini comme true par défaut dans MVC, même s’il apparaît désélectionné, il est donc possible que la validation ne fonctionne pas comme prévu. C’est pourquoi vous devez ajouter ce code javascript pour parfaire la validation.

<script>
            // extend jquery range validator to work for required checkboxes
            var defaultRangeValidator = $.validator.methods.range;
            $.validator.methods.range = function(value, element, param) {
                if(element.type === 'checkbox') {
                    // if it's a checkbox return true if it is checked
                    return element.checked;
                } else {
                    // otherwise run the default validation function
                    return defaultRangeValidator.call(this, value, element, param);
                }
            }
        </script>

Profitez du codage

1
Odin