2010-02-13 21 views
8

में एएसपी.नेट एमवीसी 2 डेटा एनोटेशन मैं उपयोगकर्ता इनपुट के आधार पर गतिशील रूप से अपना व्यू मॉडल उत्पन्न करने वाला एएसपीनेट एमवीसी 2 एप्लिकेशन बना रहा हूं। सीधे शब्दों में कहें, उपयोगकर्ता यह चुनने में सक्षम है कि वह अपने दृश्य में कौन से फ़ील्ड देखना चाहता है।गतिशील रूप से जेनरेट किए गए मॉडल

चूंकि टेम्पलेट किए गए सहायक मॉडल मॉडल गुणों और विशेषताओं (डेटा एनोटेशन) पर भारी निर्भर हैं, इसलिए मुझे रनटाइम के दौरान दृश्य मॉडल में विशेषताओं को जोड़ने की आवश्यकता होगी। यह कहने की कोई ज़रूरत नहीं है कि यह एक आसान काम नहीं है।

तो, आप इस परिदृश्य में मुझे क्या करने की सलाह देते हैं? मैं गुणों को स्थिर रूप से जोड़ने में सक्षम नहीं हूं, इसलिए मुझे आगे बढ़ना चाहिए और उन्हें गतिशील रूप से जोड़ने का प्रयास करना चाहिए, भले ही यह बहुत काम हो या मुझे एक अलग दृष्टिकोण का उपयोग करने की कोशिश करनी चाहिए?

अग्रिम धन्यवाद!

फेलिप

उत्तर

3

एक कस्टम मॉडल बाइंडर केवल बाध्यकारी भाग में आपकी सहायता करेगा। यह टेम्पलेट हेल्पर्स या एएसपी.नेट एमवीसी की अन्य सुविधाओं में मदद नहीं करेगा।

मैं ModelMetadataProvider से इनहेरिट और ModelMetadataProviders का उपयोग करके Global.asax में अपने प्रदाता पंजीकरण करके इसके बजाय कस्टम मेटाडाटा प्रदाता लेखन सलाह देते हैं। एक कस्टम मेटाडाटा प्रदाता कहीं भी अपनी मेटाडेटा प्राप्त कर सकता है: सीएलआर विशेषताएँ, एक्सएमएल फ़ाइल, डेटाबेस, या एक यादृच्छिक संख्या जेनरेटर। अंतर्निहित अंतर्निहित डेटा एनोटेशन प्रदाता सीएलआर विशेषताओं का उपयोग करता है।

आप प्रदाता को कार्यान्वित करने का उदाहरण देखने के लिए अंतर्निहित डेटा एनोटेशन मेटाडेटा प्रदाता के स्रोत स्रोत पर एक नज़र डालना चाहते हैं। आप the CodePlex site से एएसपी.नेट एमवीसी 2 आरसी 2 स्रोत कोड डाउनलोड कर सकते हैं। एमवीसी फ्यूचर्स प्रोजेक्ट में भी कार्यान्वयन हो सकता है, लेकिन मुझे यकीन नहीं है।

+0

धन्यवाद बहुत आदमी! –

0

overkill की तरह लगता है (अगर मैं सही ढंग से समझ) - कि मक्खी पर मॉडल पैदा कर रही है। आप मॉडल रखने के मुख्य लाभ का उपयोग नहीं कर रहे हैं; समय जांच संकलित करें।

मैं कार्य के लिए विशिष्ट वस्तुओं का उपयोग करने की कोशिश करता हूं (उदाहरण के लिए एक उपयोगकर्ताफॉर्म क्लास जिसमें उपयोगकर्ताफॉर्मफ़िल्ड्स कक्षाओं की सूची होगी और इसी तरह) हाथ में और उन्हें फ्लाई पर नहीं बनाएंगे।

संपादित करें: क्या मैं सुझाव दे रहा हूँ करने के लिए नहीं उपयोग विशेषता आधारित सत्यापन है और मन में मान्यता के साथ अपने मॉडल डिजाइन। नीचे की तरह एक डिज़ाइन मेरे बिंदु को बेहतर तरीके से समझा सकता है:

interface IUserValidation 
{ 
    bool IsValid(); 
} 

class RequiredUserValidation : IUserValidation 
{ 
    public bool IsValid() 
    { 
     // .... 
    } 
} 

class UserFormField 
{ 
    List<IUserValidation> _validations; 

    public IEnumerable<ValidationResult> Validate() 
    { 
     // ... 
    } 
} 
+0

यह लगभग मेरा मॉडल कैसा दिखता है। डेटा युक्त फ़ील्ड का संग्रह। समस्या यह है कि मेरे पास संकलन समय पर इन क्षेत्रों के बारे में कोई जानकारी नहीं है। मुझे डेटाबेस से पूछताछ करने और फ़ील्ड से जानकारी प्राप्त करने की आवश्यकता है और वे अपने गुणों को चित्रित करते हैं –

0

ऐसा लगता है कि आपको एक कस्टम व्यू मॉडल बाइंडर की आवश्यकता होगी जो गतिशीलता को लागू करता है।

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