एएसपी.Net और GetType ()

मैं एक प्रकार का "बेसपेज" ऑब्जेक्ट प्राप्त करना चाहता हूं जिसे मैं बना रहा हूं। प्रत्येक पृष्ठ वस्तु बेसपेज से आधारित है। उदाहरण के लिए, मेरे पास login.aspx है और मेरे कोड-बैक और एक क्लास में एक विधि है डिस्प्ले:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(page.GetType());
}

मेरी प्रोजेक्ट संरचना में मेरे पास एक डिफ़ॉल्ट संसाधन फ़ाइल और एक psuedo-translation संसाधन फ़ाइल है। अगर मैं इस तरह कुछ कोशिश करता हूं:

Display(BasePage page) {
    ResourceManager manager = new ResourceManager(typeof(Login));
}

यह अनुवादित पृष्ठ लौटाता है। कुछ शोध के बाद मुझे वह पृष्ठ मिला। गेट टाइप ()। ToString() ने "ASP_login.aspx" के प्रभाव में कुछ वापस कर दिया है, मैं क्लास प्रकार के पीछे वास्तविक कोड कैसे प्राप्त कर सकता हूं, जैसे कि मुझे "लॉगिन" प्रकार का ऑब्जेक्ट मिलता है "बेसपेज" से व्युत्पन्न?

अग्रिम में धन्यवाद!

6

4 उत्तर

यदि आपका कोड-इसके जैसा दिखता है:

public partial class _Login : BasePage 
 { /* ... */ 
 }

फिर आपको typeof (_Login) के साथ टाइप ऑब्जेक्ट प्राप्त होगा। प्रकार को गतिशील रूप से प्राप्त करने के लिए, आप इसे पुनः प्राप्त कर सकते हैं:

Type GetCodeBehindType()
 { return getCodeBehindTypeRecursive(this.GetType());
 }

Type getCodeBehindTypeRecursive(Type t)
 { var baseType = t.BaseType;
   if (baseType == typeof(BasePage)) return t;
   else return getCodeBehindTypeRecursive(baseType);
 }
6
जोड़ा

कुछ अतिरिक्त शोध के बाद मुझे पता चला कि अगर मैं पेज.गेट टाइप() को कॉल करता हूं। बेस टाइप यह एएसपीएक्स पेज के कोड-बैक प्रकार को वापस देता है।

3
जोड़ा

पेज। गेट टाइप ()। बेस टाइप, यह पहले कहा गया है, लेकिन मुझे बताएं कि क्यों।

एएसपीएक्स पेज उनके कोड-बैक पेजों से प्राप्त होते हैं, जिसका अर्थ है कि विरासत पदानुक्रम इस तरह दिखता है:

...
Page
BasePage
Login
ASP_Login

जहां शीर्ष माता-पिता है और नीचे बच्चा है।

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

1
जोड़ा

यह निर्भर करता है कि आप कहां से प्रदर्शन() को कॉल कर रहे हैं। यदि आप इसे एएसपीएक्स से बुला रहे हैं, तो आप "ASP_login.aspx" करेंगे। यदि आप इसे कोड-बैक (यानी पेज_लोड() विधि से कॉल कर रहे हैं) तो आपको लॉगिन पेज प्रकार प्राप्त करना चाहिए।

पृष्ठ को पारित करने के बजाय, आप केवल पृष्ठ प्रॉपर्टी (यानी यह। पेज.गेटटाइप ()) का उपयोग करने पर विचार कर सकते हैं, जो हमेशा सही पृष्ठ/कोडबेंड प्रकार होना चाहिए, अगर मुझे सही याद है।

मुझे यह भी मुद्दा बनाना चाहिए कि आप एएसपीएक्स/कोडबेइंड से और किसी प्रकार की सेवा में इस तरह की चीजें को स्थानांतरित करने पर विचार कर सकते हैं। आम तौर पर एक कोड में आपके द्वारा किए गए कार्यों की मात्रा को कम करने और इसके बजाय, एक प्रस्तुतकर्ता वर्ग में तर्क को धक्का देना और एएसपी.नेट वेब फॉर्म विकास के लिए एमवीपी पैटर्न का पालन करना एक अच्छा विचार है।

0
जोड़ा