使用xVal验证必须为true的bool

时间:2010-01-21 11:06:31

标签: asp.net-mvc validation xval boolean

我有业务要求在允许提交表单之前强制HTML表单上的复选框标记为true。

如果未使用相应的消息检查此框,但我希望同时从表单数据的xVal验证中返回所有信息,则可以将用户返回到表单。

我在其他地方找不到任何信息,因此可以使用xVal将bool验证为true(或false),类似于使用[Range(min, max)] DataAnnotation或必须手动.AddModelError(..)包含此信息将错误添加到ViewModel?

2 个答案:

答案 0 :(得分:4)

您是否尝试过创建自己的验证属性?我为这种情况创建了一个TrueType属性。

using System;
using System.ComponentModel.DataAnnotations;

namespace KahunaCentralMVC.Data.ModelValidation.CustomValidationAttributes
{
    public class TrueTypeAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            if (value == null) return false;
            bool newVal;
            try
            {
                newVal = Convert.ToBoolean(value);
                if (newVal)
                    return true;
                else
                    return false;
            }
            catch (InvalidCastException)
            {
                return false;
            }
        }
    }
}

[MetadataType(typeof(FooMetadata))]
public partial class Foo
{
    public class FooMetadata
    {
        [Required(ErrorMessage = " [Required] ")]
        [TrueTypeAttribute(ErrorMessage = " [Required] ")]
        public bool TruVal { get; set; }
    }
}

答案 1 :(得分:1)

xVal会在复选框上处理必填字段数据注释,必须进行检查。我最近不得不解决这种情况,因为我试图表示一个不可为空的布尔值,其中复选框可以是true或false(只是不为null)。但在你的情况下,这完美地解决了。但是,它会提供必要的字段验证消息,您可能正在寻找“必须接受这些条款”类型的消息。

最简单的方法是使用xval远程规则验证,并从ajax资源进行验证。