2010-03-18 42 views
0

我有這樣定義一個枚舉:Entlib驗證語法只接受數字月份數字?

Private Enum AllowedMonthNumbers 
    _1 
    _2 
    _3 
    _4 
    _5 
    _6 
    _7 
    _8 
    _9 
    _10 
    _11 
    _12 
End Enum 

然後屬性驗證定義爲:

<TypeConversionValidator(GetType(Int32), MessageTemplate:="Card expiry month must be numeric.", Ruleset:="CreditCard")> _ 
<EnumConversionValidator(GetType(AllowedMonthNumbers), MessageTemplate:="Card expiry month must be between 1 and 12.", Ruleset:="CreditCard")> _ 

驗證預期「_#」,當我刪除TypeConversionValidator,它通過將值設置爲「_3」或枚舉中的任何其他數字。

我需要的僅僅是接受b/t 1-12,並且僅僅在枚舉中使用數字值將不起作用。

任何提示?

謝謝。

UPDATE

我替換爲RangeValidator控件的EnumConversionValidator,並試圖將參數設置爲「1」,但收到以下錯誤:

<RangeValidator(1, RangeBoundaryType.Inclusive, 12, RangeBoundaryType.Inclusive, MessageTemplate:="..."> 

但是那現在給我下面的錯誤:

System.Web.Services.Protocols.SoapException : System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.ArgumentException: Object must be of type Int32. 
    at System.Int32.CompareTo(Object value) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeChecker`1.IsInRange(T target) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RangeValidator`1.DoValidate(T objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validator`1.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.AndCompositeValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.ValueAccessValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.AndCompositeValidator.DoValidate(Object objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validators.GenericValidatorWrapper`1.DoValidate(T objectToValidate, Object currentTarget, String key, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validator`1.Validate(T target, ValidationResults validationResults) 
    at Microsoft.Practices.EnterpriseLibrary.Validation.Validation.Validate[T](T target, String[] rulesets) 
    at .... 

回答

0

RangeValidator只能處理原始類型如整數,浮點,雙,小數。因爲您在構造函數中提供了一個整數,所以它試圖將該int與您的枚舉相匹配,因爲VAB使用Object.Compare(object)方法,所以會失敗。

嘗試使用設計,您不必將枚舉範圍定義爲枚舉。嘗試使用簡單的整數字段。更不痛苦。

相關問題