您如何验证ASP.Net MVC 2中的复选框?

Sco*_*eld 8 asp.net asp.net-mvc-2

使用MVC2,我有一个简单的ViewModel,它包含一个bool字段,在视图上呈现为一个复选框.我想验证用户是否选中了该框.我的ViewModel上的[Required]属性似乎不起作用.我相信这是因为未经检查的复选框表单字段在POST期间实际上并未传回,因此验证不会在其上运行.

有没有一种标准的方法来处理MVC2中的复选框"必需"验证?或者我必须为它编写自定义验证器吗?我怀疑自定义验证器不会因上述原因而被执行.我在控制器中明确地检查了它吗?这看起来很乱......

任何指导将不胜感激.

斯科特

编辑清晰度:正如下面的评论所指出的,这是一个"同意我们的条款"类型的复选框,因此"未选中"是一个有效的答案,所以我真的在寻找"已检查"验证.

SQu*_*eek 14

自定义验证器是要走的路.我将发布我用来验证用户接受条款的代码...

public class BooleanRequiredToBeTrueAttribute : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        return value != null && (bool)value;
    }
}
Run Code Online (Sandbox Code Playgroud)


Jok*_*kin 12

我通常使用:

[RegularExpression("true")]
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个,虽然我不得不调整它:`[RegularExpression("true | True")]`让它适合我.(我正在使用MVC3,如果这有所不同?) (2认同)

Dan*_*ous 6

如果您不想创建自己的自定义验证器,并且仍希望使用模型中的现有属性,则可以使用:

[Range(typeof(bool), "true", "true", ErrorMessage="You must accept the terms and conditions.")]
Run Code Online (Sandbox Code Playgroud)

这可确保布尔值的范围介于true和true之间.但是,虽然这种方法可行,但我仍然希望在这种情况下使用自定义验证器.我只是认为我会提到这个作为替代选择.