2015-01-10 94 views
0

我有以下枚舉:RangeAttribute與枚舉

public enum ApplicationLogTypes 
    { 
     Undefined = 0, 
     Information = 100, 
     Statistic = 200, 
     Debug = 300, 
     Security = 400, 
     Error = 500 
    } 

我有RangeAttribute驗證屬性,以強制用戶沒有選擇默認選項「未定義」:

[Range(1, int.MaxValue, ErrorMessage = "Cannot select default option.")] 
public ApplicationLogTypes ApplicationLogType { get; set; } 

但是,當我使用驗證器,它通過:

public bool IsValid(ICollection<ValidationResult> results) 
{ 
    bool isValid; 
    ValidationContext validationContext = new ValidationContext(this); 

    isValid = Validator.TryValidateObject(this, validationContext, results); 

    return isValid; 
} 

使用此方法的其他驗證適當地失敗驗證使用其他屬性,例如Required。

有什麼建議嗎?

回答

2

試試這個:

isValid = Validator.TryValidateObject(this, validationContext, results, true); 

沒有與枚舉沒有問題,你只是錯過了最後一個參數 - validateAllProperties 類型:System.Boolean 真正驗證所有屬性;如果爲false,則僅驗證所需的屬性。

+0

好的,thx! – Josh

2

解決方法建議:刪除Undefined枚舉值。相反,使用可爲空的枚舉類型和空值作爲未知值。然後你可以使用所需的驗證器。

可能的原因:您的值類型是枚舉,但指定了整數範圍。嘗試將枚舉值指定爲最小/最大值或使用RangeAttribute.OperandType

+0

有趣的方法,從來沒有想過要使枚舉爲空。任何想法爲什麼範圍不捕獲未定義的/ 0枚舉? – Josh

+0

看我的編輯,雖然我不是100%肯定在這裏。我認爲它應該是一個例外,如果你使用不匹配的類型,你應該單獨實例化一個RangeAttribute實例並手動調用它的IsValid方法來確保。 – fejesjoco