2014-12-30 6 views
6

के सभी के लिए मान्यता का उपयोग किए बिना मॉडल में वर्ग पुन: उपयोग करने मैं संपर्ककैसे उन्हें

public class Contact 
{ 
    public string Title { get; set; } 

    public string FirstName { get; set; } 

    [Required(ErrorMessage = "Please enter LastName")] 
    public string LastName { get; set; } 

    [Required(ErrorMessage = "Please enter Email")] 
    public string Email { get; set; } 

    public string Phone { get; set; } 
} 

अब मैं दो मॉडल में मेरे संपर्क क्लास का उपयोग, लेकिन केवल दूसरे पर सत्यापन लागू करना चाहते हैं के लिए सामान्य मॉडल है?

 public class Step1Model{ 
     public Contact Contact{get;set;} 
     } 

    public class Step2Model{ 
    [Requried] 
    public Contact Contact{get;set;} 
    } 

मैं इसे कैसे काम करूं? एक अंतरफलक जो एक ContactRequired वर्ग और एक ContactOptional ContactInterface पर आधारित वर्ग बनाने के लिए की आवश्यकता होगी करने के लिए कोड -

1:

+0

[यह] (http://stackoverflow.com/a/14072088/728795) और [इस] (http://stackoverflow.com/q/12712601 है/728795) – Andrei

+0

प्राप्त करने के लिए आप जो थ्रेड देख रहे हैं उसके करीब थ्रेड्स आप एनोटेशन को मेटाडेटा प्रकार पर ले जा सकते हैं (देखें ['मेटाडेटा टाइप एट्रिब्यूट'] (http://msdn.microsoft.com/en-us/library/system.componentmodel .dataannotations.metadatatypeattribute% 28v = vs.110% 29.aspx)), लेकिन मुझे संदेह है कि मेटाडेटा प्रकार पर सभी डेटा एनोटेशन होने की आवश्यकता होगी। – Richard

उत्तर

0

मैं यहाँ दो विकल्प देखेंगे। मेरा मानना ​​है कि यह आपको एक स्टेपमोडेल रखने की अनुमति देगा जहां आप स्टेपमोडेल सेट करेंगे। किसी नए संपर्क की आवश्यकता() या एक नया संपर्क विकल्प() पर संपत्ति से संपर्क करें। फिर जब validaiton StepModel के लिए चलता है, तो यह आपके द्वारा StepModel के लिए सेट की गई श्रेणी के प्रकार के आधार पर होगा। संपर्क संपत्ति।

public interface ContactInterface 
{ 
    string Title { get; set; } 
    string FirstName { get; set; } 
    string LastName { get; set; } 
    string Email { get; set; } 
    string Phone { get; set; } 
} 
public class ContactOptional : ContactInterface 
{ 
    public string Title { get; set; } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public string Email { get; set; } 

    public string Phone { get; set; } 
} 
public class ContactRequired : ContactInterface 
{ 
    public string Title { get; set; } 

    public string FirstName { get; set; } 

    [Required(ErrorMessage = "Please enter LastName")] 
    public string LastName { get; set; } 

    [Required(ErrorMessage = "Please enter Email")] 
    public string Email { get; set; } 

    public string Phone { get; set; } 
} 
public class StepModel 
{ 
    public ContactInterface Contact { get; set; } 
} 

उपयोग:

StepModel smTest = new StepModel(); 
    ContactRequired crContact = new ContactRequired(); 
    ContactOptional coContact = new ContactOptional(); 
    List<ValidationResult> lErrors = new List<ValidationResult>(); 

    smTest.Contact = coContact; 
    //Validate Option 
    if (Validator.TryValidateObject(smTest, new ValidationContext(smTest, serviceProvider: null, items: null), lErrors, true)) 
    { 
     //Code should reach this as the model should be valid; 
    } 

    smTest.Contact = crContact; 
    //Validate Required 
    if (Validator.TryValidateObject(smTest, new ValidationContext(smTest, serviceProvider: null, items: null), lErrors, true)) 
    { 
     //Code should not reach this as the model should be invalid; 
    } 

2 - एक कस्टम आवश्यक विशेषता जो संपर्क मॉडल (जैसे bool UseValidation के रूप में) का एक और संपत्ति पर नजर डालेंगे बनाएं निर्धारित करने के लिए यदि आवश्यक सत्यापन भी जगह ले जाना चाहिए या अगर इसे डिफ़ॉल्ट रूप से सही रूप से वापस करना चाहिए। मैं शुरुआत में इस विकल्प के लिए कोड प्रदान नहीं कर रहा हूं क्योंकि आपको अपनी कक्षा में प्रत्येक प्रकार की सत्यापन विशेषता के लिए कस्टम विशेषता की आवश्यकता होगी। साथ ही, मुझे लगता है कि विकल्प 1 बेहतर है जब तक कि आपके पास इसके खिलाफ कोई विशिष्ट कारण न हो।

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