जब आप किसी वेब प्रपत्र .aspx फ़ाइल में एक चर घोषित करते हैं, तो आप वास्तव में एक ऑटो-जेनरेटेड प्रतिपादन विधि के अंदर एक स्थानीय चर घोषित कर रहे हैं। एएसपी.नेट runat="server"
चिह्नित सभी टैग के लिए अलग प्रतिपादन विधियों को उत्पन्न करता है, इसलिए आपको वास्तव में आपके मुख्य तत्व के लिए एक अलग विधि मिलती है। अब, आपके द्वारा घोषित वेरिएबल केवल इन विधियों में से एक में मौजूद हो सकता है - इसलिए 'अजीब' व्यवहार।
आप देख सकते हैं कि यह कैसे काम करता है यदि आप pre-compile your application using aspnet_compiler.exe. आपको अपने प्रत्येक वेब फ़ॉर्म पृष्ठों के लिए डीएलएल फाइल संकलित करेंगे; जेनरेट कोड देखने के लिए केवल उन लोगों में से एक को प्रतिबिंबित करें। मैं चर हेड टैग के बाहर घोषित के साथ अपने कोड का एक न्यूनतम बराबर लिखा था, और यहां उच्च-स्तरीय विधि है कि मुझे मिल गया प्रस्तुत करना है:
private void __Render__control1(HtmlTextWriter __w, Control parameterContainer)
{
string str = "scripts/";
__w.Write("\r\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n\r\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\r\n");
parameterContainer.Controls[0].RenderControl(__w);
__w.Write("\r\n<body>\r\n ");
parameterContainer.Controls[1].RenderControl(__w);
__w.Write("\r\n <script type=\"text/javascript\" src=\"");
__w.Write(str);
__w.Write("jquery-1.4.1.min.js\"></script>\r\n</body>\r\n</html>\r\n");
}
आप देखते हैं कि चर है कि मैं घोषित (यहाँ str
नाम) है इस विधि के लिए स्कॉप्ड किया गया है, और यह सिर को प्रस्तुत करने के लिए अन्य विधियों को कॉल कर रहा है (और एक फॉर्म तत्व runat="server"
चिह्नित किया गया है।)
आपके सिर टैग से runat="server"
को निकालने के लिए एक त्वरित और गंदा समाधान हो सकता है; हालांकि, मैं अनुशंसा करता हूं कि आप इसके लिए अपने कोड-बैक क्लास में एक संरक्षित चर घोषित करें। अपने कोड-पीछे फाइल करने के लिए इस तरह की एक पंक्ति जोड़ना काम करेगा:
protected string scriptPath, gkoConfig;
तब आप अपने वेब प्रपत्र कोड में कहीं भी इन चर का उपयोग कर सकते हैं।
स्रोत
2012-06-08 18:29:54
जब आप कहते हैं कि "कोड-पीछे वर्ग", तुम्हारा क्या मतलब है (जैसे कि, index.aspx की तरह एक पेज के लिए)? – serhio
कोड-बैक क्लास पृष्ठ के लिए .cs फ़ाइल में घोषित कक्षा है, उदाहरण के लिए, index.aspx.cs index.aspx के लिए। –
ठीक है, समझा। मैंने एमवीसी को सीधे "क्लासिक" एएसपी अनुभव रखने के बारे में सीखना शुरू किया, इसीलिए मुझे शुरुआत में समझ में नहीं आया .. धन्यवाद! – serhio