2014-03-27 37 views
0

我使用PropertyComparisonValidatorAttribute爲這樣的值:型PropertyComparisonValidatorAttribute的驗證屬性不能被用來驗證

[PropertyComparisonValidator("Last", ComparisonOperator.LessThan)] 
    public int First 
    { 
     [...] 
    } 

    [PropertyComparisonValidator("First", ComparisonOperator.GreaterThan)] 
    public int Last 
    { 
     [...] 
    } 

然而,當是時候爲它進行驗證,我得到以下異常:

A validation attribute of type PropertyComparisonValidatorAttribute cannot be used to validate values

我不知道有任何其他方式來驗證一個屬性基於另一個的價值。要清楚,在我的XAML表單中,我想驗證用戶輸入的第一個值小於第二個值或第二個值大於第一個值。

+0

不會從EntLib驗證模塊框架,它的屬性?你嘗試過使用'[Compare(「Last」)]'而不是(從DataAnnotations命名空間)? –

+0

是的你是對的。我嘗試了比較屬性,但只是表明兩個屬性是否相等,我想確保其中一個小於另一個@AndrewStephens –

+0

我發現一些提及相同錯誤(但不同驗證屬性)的文章/問題。這聽起來像DataAnnotations框架拋出這個異常,當它不支持特定的驗證器(但文章不解釋*爲什麼*它不喜歡它們)。我可以建議的唯一事情就是編寫自己的自定義驗證屬性,例如: - http://www.itorian.com/2013/07/custom-data-annotations-or-custom.html –

回答

0

我在使用ASP.NET WebAPI自定義驗證屬性時遇到了類似的問題。 它可以通過修復,在您的驗證屬性中直接定義規則集

public class MyClass 
{  
    [PropertyComparisonValidator("Last", ComparisonOperator.LessThan, Ruleset="Default")] 
    public int First 
    { 
     [...] 
    } 

    [PropertyComparisonValidator("First", ComparisonOperator.GreaterThan, Ruleset="Default")] 
    public int Last 
    { 
     [...] 
    } 
} 

然後,當您需要將對象傳遞規則集作爲參數進行驗證,以驗證方法:

MyClass target = new MyClass(); 
// Fill your target with data. 
ValidationResults result = Microsoft.Practices.EnterpriseLibrary.Validation.Validation.Validate<MyClass>(target, "Default")