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

时间:2010-05-04 16:08:29

标签: asp.net asp.net-mvc-2

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

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

任何指导都将不胜感激。

斯科特

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

4 个答案:

答案 0 :(得分:14)

自定义验证器是可行的方法。我将发布用于验证用户接受条款的代码...

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

答案 1 :(得分:12)

我通常使用:

[RegularExpression("true")]

答案 2 :(得分:6)

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

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

这可确保布尔值的范围介于true和true之间。但是,虽然这种方法可行,但我仍然希望在这种情况下使用自定义验证器。我只是觉得我会把它作为另一种选择。

答案 3 :(得分:0)

我也在寻找一种方法让模型绑定器正确处理带有布尔值的复选框。同时我在动作中使用它:

Object.Property = !String.IsNullOrEmpty(Request.Form["NAME"]);

也许这会对你有所帮助。