2011-04-12 8 views
12

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

दृश्य में डेटा पास करने के लिए व्यूबैग/व्यूडाटा किस परिदृश्य में है?

अद्यतन

यह विभिन्न उपयोगों हर किसी ViewBag/ViewData के लिए साथ आ गया है सुनने के लिए बहुत अच्छा है। हम कभी भी "सर्वश्रेष्ठ अभ्यास" पर नहीं पहुंच सकते हैं, लेकिन यह देखने के लिए बहुत अच्छा होगा कि लोगों ने व्यूबैग/व्यूडाटा पर भरोसा करने वाले विभिन्न समाधानों को देखा है।

उत्तर

9

मैं उन्हें शायद ही कभी इस्तेमाल करते हैं, कि पूरी तरह से मॉडल या दृश्य मॉडल है कि मैं देखने के लिए गुजर रहा हूँ से संबंधित नहीं हैं जानकारी के टुकड़े के लिए, फिर से, समय की सबसे मैं एक दृश्य के मॉडल का उपयोग

+1

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

2

मैं व्यूबैग का उपयोग करने के बजाय कुछ डीटीओ का उपयोग करना पसंद करता हूं। डीटीओ का उपयोग करके आप अपने व्यूडेटा को मजबूत बनाते हैं।

उम्मीद है कि इससे मदद मिलती है।

+0

आप इस का उपयोग करेंगे विधि, दृढ़ता से टाइप टाइप करने के लिए, या जोड़ने में? और क्यों न सिर्फ डीटीओ (या उससे व्युत्पन्न व्यूमोडेल) को दृश्य टाइप करें? – stephen776

+0

यह वही है जो मैं डीटीओ के साथ दृढ़ता से अपना विचार टाइप करता हूं। मैं व्यूबैग का उपयोग करने से बचने की कोशिश करता हूं। लेकिन कुछ मामलों में त्रुटियों की तरह आप उन्हें व्यूबैग – alexl

1

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

<%:Html.DropDownList("GetIDHere", new SelectList((IEnumerable<someModel>)ViewData["xyz"]),"select Author")%> 

तो फिर तुम UIHint विशेषता अपने मॉडल के BookID मैदान पर उदाहरण

public class Book 
{ 
    public int BookID{get;set;} 
    [UIHint("mytemplate")] 
    public int AuthorID{get;set;} 
} 

के लिए इस तरह के मामलों में डाल दिया, मैं मान लें, यह विशेष रूप से ठीक है और ViewData का उपयोग करने के लिए साफ है। इस तरह से Telerik asp.net MVC के परियोजनाओं उनके डेमो में कोड किया है परियोजनाओं है demo

+1

पर पास कर सकते हैं। 'बुक' प्रॉपर्टी' और 'आईनेमरेबल ' संपत्ति के साथ व्यूमोडेल का उपयोग करने के लिए यहां एक तर्क दिया गया है, जिससे आपको मजबूत टाइपिंग मिलती है। – SamStephens

2

मैं आम तौर पर किसी भी सामग्री को प्रदर्शित करने के लिए एक जोरदार टाइप किया दृश्य का उपयोग करेगा, लेकिन अक्सर करने के लिए वर्तमान में सदस्य में लॉग इन ViewBag.Member सेट हो जाएगा इतना है कि यह किया जा सकता है विशिष्ट दृश्य के अलावा मुख्य लेआउट में।

मेरे पास PopulateMemberContext नामक एक विशेषता है जो ViewBag.Member को पॉप्युलेट करती है और मैं उस विशेषता को अपने मूल नियंत्रक में जोड़ता हूं ताकि प्रत्येक दृश्य में हमेशा आवश्यक डेटा होगा।

"दाएं" या "गलत" मुझे नहीं पता - लेकिन यह आश्चर्यजनक रूप से काम करता है।

+2

यही उपयोगकर्ता है। इडेंटिटी प्रॉपर्टी के लिए है - यह तब तक काम करेगा जब तक आपका कस्टम प्रमाणीकरण तंत्र सदस्यता प्रदाता का कार्यान्वयन नहीं करता है। –

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

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