2010-01-21 169 views
1

我有业务要求强制执行HTML窗体上的复选框是真布尔被标记允许提交表单之前为真。验证必须使用XVAL

我可以将用户返回到窗体如果此框未被选中用适当的消息,但要在同一时间从表单数据的验证XVAL返回的所有信息。

我不能在别的地方找到的任何信息,所以是有可能使用XVAL来验证一个bool为真(或假),类似于使用[Range(min, max)] DataAnnotation或必须我手动.AddModelError(..)包含该信息的错误添加到ViewModel?

回答

4

您是否尝试过创建自己的ValidationAttribute?我为这种情况创建了一个TrueTypeAttribute。

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; } 
    } 
} 
+0

感谢@MHinton,这对于添加默认以外的消息非常有用。由于默认消息是合适的,我将使用@jacerhea建议的[必需的]注释。 – StuperUser 2010-02-09 14:44:59

1

XVAL治疗上的复选框必填字段dataannotation,因为必须检查。最近我不得不解决这种情况,因为我试图表示一个不可空的布尔值,其中复选框可以是真或假(只是不为空)。但在你的情况下,这完美地运作。但是,如果您正在寻找“必须接受这些条款”类型的消息,它会提供必要的字段验证消息。

这可能是最容易使用的远程XVAL规则验证,并从阿贾克斯资源验证。

+0

幸运的是,复选框的作用是充当特定窗体的签名,所以默认消息在这种情况下是完全合适的。谢谢@ jacerhea。如果有人寻找类似的答案需要留下不同的信息,我只是没有将其标记为答案。 – StuperUser 2010-02-09 15:00:40