2012-04-15 10 views
5

नहीं कहा जा रहा है, मैं सिस्टम का उपयोग कर रहा हूं। कॉम्पोनेंट मॉडेल.डाटाएनोटेशन। कस्टमवॉलेशन एट्रिब्यूट मेरे पीओसीओ कक्षाओं में से एक को सत्यापित करने के लिए और जब मैं इसे यूनिट करने का प्रयास करता हूं, तो यह सत्यापन विधि को भी कॉल नहीं कर रहा है।कस्टम वैलिडेशनएट्रिब्यूट निर्दिष्ट विधि को

public class Foo 
{ 
    [Required] 
    public string SomethingRequired { get; set } 
    [CustomValidation(typeof(Foo), "ValidateBar")] 
    public int? Bar { get; set; } 
    public string Fark { get; set; } 

    public static ValidationResult ValidateBar(int? v, ValidationContext context) { 
    var foo = context.ObjectInstance as Foo; 
    if(!v.HasValue && String.IsNullOrWhiteSpace(foo.Fark)) { 
     return new ValidationResult("Either Bar or Fark must have something in them."); 
    } 
    return ValidationResult.Success; 
    } 
} 

लेकिन जब मैं यह प्रमाणित करने के लिए प्रयास करें:

var foo = new Foo { 
    SomethingRequired = "okay" 
}; 
var validationContext = new ValidationContext(foo, null, null); 
var validationResults = new List<ValidationResult>(); 
bool isvalid = Validator.TryValidateObject(foo, validationContext, validationResults); 
Assert.IsFalse(isvalid); //FAIL!!! It's valid when it shouldn't be! 

यह कस्टम सत्यापन विधि में कभी नहीं भी कदम दूर है। क्या देता है?

उत्तर

7

ओवरलोड का उपयोग करने का प्रयास करें जो एक बूल लेता है जो निर्दिष्ट करता है कि सभी गुणों को सत्यापित किया जाना चाहिए या नहीं। अंतिम पैरामीटर के लिए सच हो जाओ।

public static bool TryValidateObject(
    Object instance, 
    ValidationContext validationContext, 
    ICollection<ValidationResult> validationResults, 
    bool validateAllProperties 
) 

यदि आप गलत पास करते हैं या मान्य ऑलप्रॉपर्टीज को छोड़ देते हैं, तो केवल आवश्यक एट्रिब्यूट की जांच की जाएगी। यहां MSDN documentation है।

+0

यह बिल्कुल ठीक था। धन्यवाद। –

संबंधित मुद्दे