Asp.net mvc 如何在mvc中添加布尔必需属性?

Asp.net mvc 如何在mvc中添加布尔必需属性?,asp.net-mvc,validation,model,Asp.net Mvc,Validation,Model,我有一个模型课,比如: public class Student { [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] [Display(Name = "Enrollment Date")] public DateTime EnrollmentDate { get; set; } [Req

我有一个模型课,比如:

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; }
}
公共班级学生
{
[数据类型(DataType.Date)]
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
[显示(Name=“注册日期”)]
公共日期时间注册日期{get;set;}
[必需]
[显示(Name=“处于活动状态”)]
公共bool IsActive{get;set;}
公共虚拟ICollection注册{get;set;}
}
在这里,我创建了一个带有
Required
属性的
Boolean
属性
IsActive
,但问题是我的视图没有对此属性执行所需的验证?我想用
复选框
绑定此属性,并检查是否选中此
复选框
,如果未选中,则运行验证


有什么解决办法吗?

谢谢上面的解决办法,它让我走上了正确的方向,但对我来说,效果并不好。我需要将下面的脚本添加到扩展jQueryValidator的页面,以使上述解决方案工作。如果有人遇到类似的问题,我想分享一下

[Display(Name = "Is Active")]
[Range(typeof(bool), "true", "true", ErrorMessage="The field Is Active must be checked.")]
public bool IsActive { get; set; }
<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>

//扩展jquery范围验证器以用于所需的复选框
var defaultRangeValidator=$.validator.methods.range;
$.validator.methods.range=函数(值、元素、参数){
如果(element.type==='checkbox'){
//如果是复选框,则选中后返回true
返回元素。已选中;
}否则{
//否则,运行默认的验证函数
返回defaultRangeValidator.call(this,value,element,param);
}
}

让我给Sonu K帖子添加一点内容

如果对其使用HTML验证(
),它可能会中断javascript,阻止您提交模型中的空必填字段集

最后,如果您不想在执行迁移时将
激活
添加到数据库中(代码优先),只需添加
[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中默认设置为true,尽管它将在浏览器上显示uncheck,所以验证可能不会像您期望的那样工作,这就是为什么您必须添加此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'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>

//扩展jquery范围验证器以用于所需的复选框
var defaultRangeValidator=$.validator.methods.range;
$.validator.methods.range=函数(值、元素、参数){
如果(element.type==='checkbox'){
//如果是复选框,则选中后返回true
返回元素。已选中;
}否则{
//否则,运行默认的验证函数
返回defaultRangeValidator.call(this,value,element,param);
}
}

享受编码的乐趣

这段代码是最近给我的:

public class BooleanRequiredAttribute : ValidationAttribute, IClientValidatable
    {
        public override bool IsValid(object value)
        {
            return value is bool && (bool)value;
        }



        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            yield return new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
                ValidationType = "booleanrequired"
            };
        }
    }

虽然我喜欢使用Range,但它很简单,代码也更少,上面的内容为您提供了一个对未来开发人员有意义的适当属性。

不要认为您可以使用Required。看看这里。这可能有助于
Required
属性仅仅意味着属性必须有一个值。在布尔值(复选框)的情况下,值false(或unchecked)仍然是一个有效的答案。我知道这一事实,它不起作用,因为unchecked也是布尔属性的有效值,这就是为什么我要寻找解决方案。我想知道是否可以在MVC中使用默认数据注释?@SonuK您可以使用自定义验证属性来完成。阅读我添加的链接Hanks,这很有效。避免创建单独验证方法的有趣解决方法。
$.validator.unobtrusive.adapters.addBool("booleanrequired", "required");