गतिशील प्रकार का उपयोग करने से आप क्या लाभ प्राप्त करने की उम्मीद कर रहे थे?
व्यूडेटा शब्दकोश का उपयोग करना आपके व्यू आउटपुट में मनमानी ऑब्जेक्ट्स/आइटम जोड़ने का एक बहुत ही आसान तरीका है।
आपको अपने दृश्य में संपत्ति के नाम प्राप्त करने के लिए प्रतिबिंब की आवश्यकता नहीं है। नामों का संग्रह प्राप्त करने के लिए बस ViewData.Keys
का उपयोग करें।
संपादित करें: मैंने अभी गतिशीलता के बारे में कुछ और सीखा है और मुझे लगता है कि आपको DynamicObject से प्राप्त अपनी गतिशील ऑब्जेक्ट क्लास बनाने की आवश्यकता है। आप उस कक्षा में एक निजी शब्दकोश चाहते हैं और फिर TrySetMember
और TryGetMember
ओवरराइड करना चाहते हैं।
इसके अलावा संपादित करें: मुझे लगता है कि दृढ़ता से टाइप किए गए व्यूमोडेल का एक लाभ यह है कि आप इसे अपने पोस्ट एक्शन विधियों में पैरामीटर के रूप में स्वीकार कर सकते हैं। एमवीसी ढांचा मॉडल बाध्यकारी को संभालेगा और एक्शन विधि में आपके पास बस आपके व्यूमोडेल क्लास का एक उदाहरण होगा। मुझे नहीं लगता कि आपके पास एक गतिशील के साथ वह लाभ होगा, भले ही वे काम करते हों।
परिणाम संपादित करें: ठीक है, मैंने डायनामिक ऑब्जेक्ट से प्राप्त कक्षा का उपयोग करने का प्रयास किया, लेकिन दृश्य प्रस्तुत करने का प्रयास करते समय वीएस -2010 क्रैश हो गया। मुझे कोई अपवाद नहीं मिला, बस एक कठिन दुर्घटना और विजुअल स्टूडियो पुनरारंभ होता है। यहां कोड है जिसके साथ मैं दुर्घटना का कारण बनता हूं।
कस्टम गतिशील वर्ग:
public class DynViewModel : DynamicObject
{
private Dictionary<string, object> ViewDataBag;
public DynViewModel()
{
this.ViewDataBag = new Dictionary<string, object>();
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
this.ViewDataBag[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = this.ViewDataBag[binder.Name];
return true;
}
}
नियंत्रक में:
public ActionResult DynamicView()
{
dynamic p = new DynamicViewModel.Models.DynViewModel();
p.Name = "Test";
p.Phone = "111-2222";
return View(p);
}
मेरा विचार मूल रूप से क्या सवाल में सूचीबद्ध है के रूप में ही है:
<p>Name: <%=Model.Name %></p>
<p>Phone: <%=Model.Phone %></p>
मेरे निष्कर्ष: यह काम कर सकता है, लेकिन वीएस -2010 के बीटा 1 में मैं नहीं कर सकता पता लगाएं कि मेरा कोड विजुअल स्टूडियो को क्रैश क्यों करता है। वीएस -2010 बीटा 2 में इसे फिर से कोशिश की जाएगी जब इसे रिलीज़ किया जाएगा क्योंकि यह गतिशीलता के बारे में सीखने में एक दिलचस्प अभ्यास है। हालांकि, यहां तक कि अगर यह काम करना था, तो भी मुझे व्यूडाटा शब्दकोश का उपयोग करने पर कोई फायदा नहीं दिख रहा है।
बचाव के लिए फिल हैक! यहां फिल हैक द्वारा एक ब्लॉग पोस्ट है जो आपकी मदद कर सकता है। ऐसा लगता है कि आप यही चाहते थे। Fun With Method Missing and C# 4
क्या आप अपना अधिक कोड पोस्ट कर सकते हैं? मैं विशेष रूप से – Randolpho
देखने के लिए निर्माता को देखना चाहता हूं फिल हैक के ब्लॉग पोस्ट के लिंक के साथ अपना नवीनतम अपडेट देखें। – CoderDennis