2009-03-25 10 views
5

क्या मुझे एमवीसी के प्रिंसिपल के लिए कुछ मौलिक याद आ रहा है या क्या मैं पागल हो रहा हूं?एक एमवीसी व्यू के लिए दो दृढ़ता से टाइप किए गए मॉडल का उपयोग

यदि मेरे पास एक ऐसा दृश्य है जो पुस्तकों की एक सूची और लेखकों की एक सूची प्रदर्शित करता है, तो मुझे कक्षा बनाना है जिसमें पुस्तकों की सूची और लेखकों की सूची गुणों के रूप में होगी। सही?

मैं इस वर्ग का उपयोग करने के लिए दृढ़ता से दृश्य टाइप करूंगा।

अब मैं एक ही सूची के साथ एक नया पृष्ठ बनाना चाहता हूं लेकिन इसमें प्रचार की एक सूची भी है। क्या मुझे पुस्तक संपत्ति की सूची, लेखक संपत्ति की एक सूची और प्रचार संपत्ति की एक सूची के साथ एक और कक्षा बनाने की आवश्यकता है?

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

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

कृपया कोई मुझे इस सिद्धांत को समझने में मदद कर सकता है कि सभी साधारण उदाहरण शामिल नहीं हैं।

उत्तर

3

मैं का उपयोग किया है ViewData extension methodsMvcContrib से कि दृढ़ता से कई के लिए समर्थन जोड़ने टाइप किए गए मॉडल (जब तक वे अलग-अलग प्रकार होते हैं)। उन्हें ViewData में जोड़ने के लिए कोड इस तरह दिखता है:

ध्यान में रखते हुए
User currentUser = GetCurrentUser(); 
List<Project> projectList = projectRepository.GetRecentProjects(currentUser); 
ViewData.Add(user); 
ViewData.Add(projectList); 

कोड उन्हें बाहर निकलने के लिए इस तरह दिखता है:

User user = ViewData.Get<User>(); 
List<Project> projectList = ViewData.Get<List<Project>>(); 

यह दोनों "जादू तार" और प्रकार कास्टिंग निकाल देता है। ध्यान दें, यह दृश्य की मॉडल संपत्ति के साथ कुछ भी नहीं करता है।

+0

क्या आप दृश्य में चर टाइप करना चाहते हैं? मैंने सोचा कि दृश्य सिर्फ डिस्प्ले कोड होना चाहिए या क्या मैं बहुत पैडेंटिक हूं? –

0

मैं एक ही समस्या में भाग गया हूं। मुझे लगता है कि ज्यादातर लोगों के लिए सामान्य समाधान एक कंटेनर क्लास बनाना है जिसमें पुस्तकें और लेखकों के मॉडल शामिल हैं जिन्हें आप वास्तव में चाहते हैं, और उस कंटेनर को अपने व्यू में पास करें।

उप-इष्टतम, हाँ, लेकिन यह काम करता है। उम्मीद है कि इसे ढांचे के भविष्य के संस्करणों में संबोधित किया जाएगा।

1

एक कंटेनर कक्षा बनाएं के लिए कभी आपके सिस्टम में आपत्ति है, और सभी विचारों के लिए उपयोग करें - शून्य मान के साथ सरल

वस्तुओं कोई वास्तविक भूमि के ऊपर

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