9

コンパイル済みアセンブリ内の Page_Load メソッドに何かを追加できるように、ASPX Web サイトにモンキー パッチを適用するのが好きです。

私が最初に考えたのは、次のように 2 番目の Page_Load メソッドを含むスクリプト タグを ASPX ファイルに追加することでした。

<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 メソッドのみが実行され、元のコード ビハインド ファイル (コンパイル済みアセンブリ内) のメソッドは実行されないようです。

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

4

4 に答える 4

10

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

したがって、基本的に元の Page_Load メソッドを非表示にするため、Page_Load メソッドが呼び出されます。そのロジックに従って、次のことができます。

<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、子孫クラスがそれらを呼び出すことができるため、アクセシビリティの問題はありません。

于 2011-07-07T14:46:41.613 に答える
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
}

Inheritsこれが機能する理由は、ASP.Net フレームワークが、コード ビハインド ファイルで定義されたクラス (実際には、ページ タグの属性によって定義されたクラス) から継承するクラスに .aspx ファイルがコンパイルされるモデルで動作するためです。

<%@ Inherits="WebApplication1._Default" ... 
于 2011-07-07T14:45:40.103 に答える
0

これは私にとってはうまくいきます。

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

        Response.Write("additional stuff");
    } 
</script>
于 2011-07-07T14:52:07.987 に答える
0

メソッドを使用することもできますPreLoad。それらは前に呼び出されPage_Load、物事を処理するためのよりクリーンな方法になる可能性があります。

于 2011-07-07T14:46:09.023 に答える