2010-01-12 10 views
30

के साथ डेटा एनाटोटेशन मान्य करना मैं Validator class के साथ डेटा एनोटेशन के साथ सजाए गए वर्ग को सत्यापित करने की कोशिश कर रहा हूं।वैलिडेटर कक्षा

यह ठीक काम करता है जब गुण एक ही कक्षा में लागू होते हैं। लेकिन जब मैं मेटाडेटा क्लास का उपयोग करने की कोशिश करता हूं तो यह काम नहीं करता है। क्या मुझे वैलिडेटर के साथ कुछ भी करना चाहिए, इसलिए यह मेटाडेटा क्लास का उपयोग करता है? यहाँ कुछ कोड है ..

इस काम करता है:

public class Persona 
    { 
     [Required(AllowEmptyStrings = false, ErrorMessage = "El nombre es obligatorio")] 
     public string Nombre { get; set; } 

     [Range(0, int.MaxValue, ErrorMessage="La edad no puede ser negativa")] 
     public int Edad { get; set; } 
} 

यह does not काम:

ValidationContext context = new ValidationContext(p, null, null); 
      List<ValidationResult> results = new List<ValidationResult>(); 

      bool valid = Validator.TryValidateObject(p, context, results, true); 

धन्यवाद:

[MetadataType(typeof(Persona_Validation))] 
    public class Persona 
    {   
     public string Nombre { get; set; } 

     public int Edad { get; set; }   

    } 

    public class Persona_Validation 
    { 
     [Required(AllowEmptyStrings = false, ErrorMessage = "El nombre es obligatorio")] 
     public string Nombre { get; set; } 

     [Range(0, int.MaxValue, ErrorMessage = "La edad no puede ser negativa")] 
     public int Edad { get; set; } 
    } 

यह कैसे मैं उदाहरणों को मान्य है।

+0

मैं ValidationContext System.ComponentModel.DataAnnotations (MVC 2.0) मैं कुछ गलत कर रहा हूँ के भीतर नहीं मिल सकता है? – Myster

+0

@ माइस्टर जांचें कि System.ComponentModel.DataAnnotations.dll को परियोजना में संदर्भित किया गया है। – Pablote

+0

बस इस [gist] (https://gist.github.com/JimmyBoh/b7c135820c18a06648a5) (एक एक्सटेंशन विधि) का उपयोग करें और आप पी। वैलिडेट() –

उत्तर

41

मैं यहाँ जवाब मिला: http://forums.silverlight.net/forums/p/149264/377212.aspx

MVC MetaDataType विशेषता पहचानता है, लेकिन अन्य परियोजनाओं नहीं है। मान्य करने से पहले, आप मैन्युअल रूप से मेटाडाटा वर्ग रजिस्टर करने की आवश्यकता:

TypeDescriptor.AddProviderTransparent(
      new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Persona), typeof(Persona_Validation)), typeof(Persona)); 

ValidationContext context = new ValidationContext(p, null, null); 
List<ValidationResult> results = new List<ValidationResult>(); 

bool valid = Validator.TryValidateObject(p, context, results, true); 
+2

वह था! :) – Pablote

+0

मैंने यहां इसी तरह के प्रश्न के उत्तर पर विस्तार किया: http://stackoverflow.com/questions/1755340/validate-data-using-dataannotations-with-wpf-entity-framework/2467387#2467387 –

+0

'validateAllProperties' ध्वज मुझे फिसल गया यह उचित है कि यह निर्धारित करने के लायक है! – Gusdor

0

मेटाडाटा कक्षा को वही नामस्थान में पर्सन क्लास के रूप में स्थानांतरित करने का प्रयास करें, यदि यह पहले से नहीं है। मुझे इसी तरह की समस्याएं थीं और मेरी मेटाडेटा कक्षा को उसी नामस्थान में ले जाया गया क्योंकि एल 2 एस मॉडल क्लास ने मेरे लिए काम किया था।

+1

पर कॉल कर सकते हैं यह काम नहीं किया है, मैंने मेटाडेटा क्लास डालने का भी प्रयास किया है कक्षा के अंदर, लेकिन कोई भाग्य नहीं। – Pablote

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