Как добавить требуемый атрибут boolean в mvc?

У меня есть один класс модели, например:

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; }
}

Здесь я создал свойство Boolean IsActive с атрибутом Required, но проблема в том, что мое представление не выполняет требуемую проверку для этого свойства? Я хочу связать это свойство с CheckBox и проверить, проверен ли этот CheckBox, и запустить проверку, если это не так.

Любое решение для этого?

Ответ 1

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

Ответ 2

Спасибо за вышеупомянутое решение, которое поставило меня в правильном направлении, но для меня это не сработало. Мне нужно добавить ниже script на страницу, которая расширяет проверку подлинности jquery, чтобы получить вышеупомянутое решение. Мысль делиться этим, если кто-то сталкивается с подобной проблемой.

<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 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>

Ответ 3

Позвольте мне добавить немного к Sonu K сообщению

Если вы используете HTML-проверку на нем (<input type="checkbox" required/>), это может привести к нарушению вашего javascript из-за того, что вы не смогли отправить пустое поле, заданное из вашей модели

Наконец, если вы не хотите, чтобы Is Active добавлялся в базу данных при выполнении миграции (сначала код), просто добавьте [NotMapped]

Полный код

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

потому что он установлен как истинный по умолчанию в MVC, несмотря на то, что он будет отображаться в браузере, поэтому проверка может не работать так, как вы ожидаете, поэтому вам нужно добавить этот код javascript, чтобы улучшить проверку.

<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 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>

Наслаждайтесь кодированием