2011-07-07 9 views
8

コンパイルされたアセンブリ内でPage_Loadメソッドに追加することができるように、私はMonkeyのASPX Webサイトにパッチを当てるのが好きです。インラインコードから元のPage_Load関数を呼び出す

私の最初の考えはそうのようなASPXファイルに2つ目の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メソッドが実行されないように見えます1つは元のコードビハインドファイル(コンパイルされたアセンブリ内)からのものです。

私のインラインコードから元のメソッドを呼び出すことは可能ですか?または、既存のアセンブリを変更せずにインラインコードからPage_Loadメソッドを呼び出した直後に実行する必要があるものを追加する方法はありますか?

答えて

10

asp.netモデルでは、.aspxファイルで宣言されたページは、実際には.aspx.csファイルで宣言されたSystem.Web.UI.Pageから継承するクラスの子孫クラスです。

したがって、元のPage_Loadメソッドを基本的に隠すので、Page_Loadメソッドが呼び出されます。そのロジックに続いて、あなたが行うことができます:デフォルトでasp.netはそれらを呼び出すことができますをPage_Loadとprotectedので、下位クラスと同様のメソッドを宣言しているため

<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> 

にはアクセシビリティの問題はありません。

+1

base.Page_Load(sender、e)にする必要があります。 – 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> 
関連する問題