पर काम नहीं कर रहा है कम से कम, मुझे लगता है कि यह समस्या से संबंधित है। मेरा परिदृश्य यह है:EditorFor व्युत्पन्न प्रकार
मेरे पास सामान्य फ़ील्ड के साथ कई व्यावसायिक संस्थाएं हैं, और प्रत्येक के पास उस इकाई के लिए अद्वितीय फ़ील्ड अद्वितीय हैं। तो कोड में, इसे EntityBase
वर्ग के रूप में मॉडलिंग किया गया है, और इसमें से कई वर्ग व्युत्पन्न हैं, उदाहरण के लिए, Derived
।
@ModelType EntityBase
@Using Html.BeginForm("Edit", Model.GetType.Name)
@* show the editor template for the derived type *@
@* !!the next line renders nothing!! *@
@Html.EditorFor(Function(x) Model, Model.GetType.Name)
[show a bunch of stuff common to all EntityBase objects]
End Using
और फिर एक व्युत्पन्न वर्ग है कि यह करता है के लिए Derived.vbhtml
कहा जाता है:
@ModelType Derived
[show an EditorFor for various Derived-specific fields]
एक पुन: प्रयोज्य यूआई बनाने के लिए, मैं एक दृश्य EntityBase.vbhtml
कहा जाता है कि इस तरह दिखता है मिल गया है फिर, जब आप \Derived\Edit\123
पर नेविगेट करते हैं, तो यह डिफ़ॉल्ट दृश्य Derived\Edit.vbhtml
देता है, जो यह करता है:
@Html.EditorForModel("EntityBase")
इस तरह, नियंत्रक केवल अपेक्षित डिफ़ॉल्ट संपादन दृश्य को वापस करते हैं, जो EntityBase
व्यू के लिए एक-लाइनर कॉल है, जो इसकी बात करता है और व्युत्पन्न क्लास सामग्री को प्रस्तुत करने के लिए Derived
को आमंत्रित करता है, जिसके बारे में इसका कोई ज्ञान नहीं है।
मैंने सोचा कि यह अपरिहार्य था, लेकिन यह काम नहीं करता है। जैसा कि दृश्य कोड में चिह्नित किया गया है, जब मैं बेस क्लास व्यू के भीतर EditorForModel को कॉल करता हूं, टेम्पलेट के रूप में उपयोग के लिए व्युत्पन्न कक्षा का नाम निर्दिष्ट करता हूं, तो यह कुछ भी प्रस्तुत नहीं करता है। मैंने परीक्षण किया है कि यदि मैं शीर्ष स्तर पर कोड की इस सटीक रेखा को कॉल करता हूं तो टेम्पलेट संपादित करें, यह ठीक काम करता है। तो विरासत के बारे में कुछ है जो एमवीसी पसंद नहीं करता है, लेकिन मैं नहीं देख सकता। कृपया सहायता कीजिए!
अद्यतन: यह काम करता है के रूप में मैं क्योंकि मुझे लगता है कि यह नहीं करने के लिए भ्रामक है EditorFor
मैं Partial
का उपयोग करने के बजाय अगर उम्मीद (और EditorTemplates फ़ोल्डर से साझा फ़ोल्डर में इसी टेम्पलेट ले जाते हैं) होता है, लेकिन यह एक महान समाधान नहीं है EditorFor टेम्पलेट्स के लिए नामकरण सम्मेलन का पालन करें।
मुझे एक ही समस्या का सामना करना पड़ा। एक महान कामकाज के लिए धन्यवाद। मैं बस हारने वाला था :) –
इसे सुनकर खुशी हुई! मैं वास्तव में इस पर अपने बालों को फाड़ा। –