Asp.net एमवीसी उपयोगकर्ता नियंत्रण ViewData


5

जब कोई नियंत्रक किसी मॉडल के आधार पर दृश्य प्रस्तुत करता है तो आप इंडेक्सर (यानी व्यूडाटा ["संपत्ति"] का उपयोग करके व्यूडेटा संग्रह से गुण प्राप्त कर सकते हैं।

return View("Message", new { DisplayMessage = "This is a test" }); 

और मेरे संदेश नियंत्रण पर मैं इस किया था: लेकिन, मैं एक साझा उपयोगकर्ता नियंत्रण है कि मैं का उपयोग कर कॉल करने के लिए निम्नलिखित की कोशिश की है

<%= ViewData["DisplayMessage"] %> 

मैं इस DisplayMessage सही ढंग से प्रस्तुत करना होगा लगता होगा, हालांकि, शून्य वापस आ रहा है। चारों ओर फेर का एक भारी खुराक के बाद, मैं अंत में एक "MessageData" वर्ग क्रम में दृढ़ता से मेरे उपयोगकर्ता नियंत्रण टाइप करने के लिए बनाया:

public class MessageControl : ViewUserControl<MessageData> 

और अब इस कॉल में काम करता है:

return View("Message", new MessageData() { DisplayMessage = "This is a test" }); 

और की तरह प्रदर्शित किया जा सकता इस:

<%= ViewData.Model.DisplayMessage %> 

क्यों उपयोगकर्ता नियंत्रण मजबूत बिना लिखे ViewData (यानी ViewData [ "DisplayMessage"]।) संग्रह में जोड़े जाने DisplayMessage संपत्ति नहीं होगा? क्या यह डिजाइन द्वारा है? क्या यह समझ में नहीं आता कि ViewData में "DisplayMessage" की कुंजी होगी?

6

विधि

ViewData.Eval("DisplayMessage") 

आप के लिए काम करना चाहिए जवाब देने को रोकने के लिए की जरूरत है।


2
बेशक

के बाद मैं इस सवाल का मैं तुरंत जाहिर है इस आवरण वर्ग की वजह से होता गूगल

http://forums.asp.net/t/1197059.aspx

पर कुछ अधिक खोजों के बाद जवाब खोजने पैदा करते हैं। फिर भी, ऐसा लगता है कि पास की गई किसी भी संपत्ति को डिफ़ॉल्ट रूप से व्यूडेटा संग्रह में जोड़ा जाना चाहिए।

मैं वास्तव में अपने ही सवालों :(