2010-01-21 175 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