2011-07-07 35 views
8

से मूल पेज_लोड फ़ंक्शन को कॉल करना मुझे एक एएसपीएक्स वेबसाइट बंदर को पैच करना पसंद है ताकि मैं संकलित असेंबली के भीतर पेज_लोड विधि में सामान जोड़ सकूं।इनलाइन कोड

मेरी पहली सोचा एक स्क्रिप्ट इतनी तरह ASPX फाइल करने के लिए एक दूसरे Page_Load विधि युक्त टैग को जोड़ने के लिए किया गया था:

<script language="CS" runat="server"> 
void Page_Load(object sender, System.EventArgs e) 
{ 
    // do some stuff in addition to the original Page_Load method 
} 
</script> 

लेकिन यह इनलाइन कोड से केवल Page_Load विधि की तरह दिखता है और निष्पादित नहीं किया जाएगा मूल कोड-पीछे फ़ाइल (संकलित असेंबली के भीतर) से एक।

क्या मूल विधि को मेरे इनलाइन कोड से कॉल करना संभव है? या मौजूदा असेंबली को संशोधित किए बिना इनलाइन कोड के भीतर से पृष्ठ_लोड विधि को कॉल करने के बाद सीधे चलने वाली सामग्री को जोड़ने का कोई अन्य तरीका है?

उत्तर

10

एएसपीनेट मॉडल यह है कि .aspx फ़ाइल में घोषित पृष्ठ वास्तव में कक्षा से एक वंशज वर्ग है जो 0/से .aspx.cs फ़ाइल में घोषित किया गया है।

तो आपकी पेज_लोड विधि को कॉल किया जाता है क्योंकि यह मूल रूप से मूल पृष्ठ_लोड विधि को छुपाता है। उस तर्क के बाद, आप कर सकता है:

<script language="CS" runat="server"> 
void Page_Load(object sender, System.EventArgs e) 
{  
    base.Page_Load(sender, e); 
    // do some stuff in addition to the original Page_Load method 
} 
</script> 

कोई उपयोग से संबंधित समस्याओं क्योंकि डिफ़ॉल्ट रूप से asp.net वाणी Page_Load और protected तो वंशज वर्ग के रूप में इसी तरह के तरीकों के लिए उन्हें फोन कर सकते हैं कर रहे हैं।

+1

आधार होना चाहिए। पेज_लोड (प्रेषक, ई); – mhenry1384

+0

इसके लिए आपको बहुत बहुत धन्यवाद! –

3

हाँ, यह है:

void Page_Load(object sender, System.EventArgs e) 
{ 
    // Do some things before calling the original Page_Load 
    base.Page_Load(sender, e); 
    // Do some things after calling the original Page_Load 
} 

कारण यह काम करता है कि ASP.Net ढांचे मॉडल जहां .aspx फ़ाइल एक वर्ग उस वर्ग अपने कोड में परिभाषित से विरासत में संकलित हो जाता है पर चल रही है फ़ाइल (वास्तव में वर्ग पेज टैग पर Inherits विशेषता के आधार पर परिभाषित)

<%@ Inherits="WebApplication1._Default" ... 
0

पीछे तुम भी PreLoad विधि का उपयोग करने की कोशिश कर सकते हैं। जिन्हें Page_Load से पहले बुलाया जाता है और चीजों को संभालने के लिए एक क्लीनर तरीका हो सकता है।

0

यह मेरे लिए काम करता है।

<script language="CS" runat="server"> 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     Response.Write("additional stuff"); 
    } 
</script> 
संबंधित मुद्दे