我有业务要求在允许提交表单之前强制HTML表单上的复选框标记为true。
如果未使用相应的消息检查此框,但我希望同时从表单数据的xVal验证中返回所有信息,则可以将用户返回到表单。
我在其他地方找不到任何信息,因此可以使用xVal将bool验证为true(或false),类似于使用[Range(min, max)]
DataAnnotation或必须手动.AddModelError(..)
包含此信息将错误添加到ViewModel?
答案 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资源进行验证。