1

PageBaseASP.NET から継承するという名前のクラスがありますPagePageBaseで何とかしたいPage_Load。私のアプリケーションのすべてのページには、Page_Load. ページをオーバーライドすることなく、のページと他のページPage_Loadの両方を実行する方法を考えています。可能ですか?PageBasePage_Load

4

1 に答える 1

7

はい、可能です。コンストラクター内にPage_Loadハンドラーをアタッチするだけです。これがあなたのやり方です。

/// <summary>
/// Your PageBase class.
/// </summary>
public class PageBase : System.Web.UI.Page
{
    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Load += new EventHandler(this.Page_Load);
    }

    /// <summary>
    /// Your Page Load
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_Load(object sender, EventArgs e)
    {
        try
        {
        }
        catch
        {
             //handle the situation gracefully.
        }
    }
}

編集

仕組みは次のとおりです。

LoadSystem.Web.UI.Pageは、PageBaseクラスにそのまま継承される宣言されたパブリックイベントです。これは、イベントにハンドラーをいくつでもアタッチできるイベントであるため、Loadイベントが発生するたびに、それぞれが呼び出されて実行されます。このPageBaseクラスでは、イベントハンドラルーチンをLoadイベントにアタッチしています。これは、ベースバージョンを明示的に呼び出す必要があるOnLoad保護ルーチンを継承する代わりにそれを行うためのより良い方法です。実際のPageオブジェクトが作成/インスタンス化されると、基本クラスオブジェクトが最初に作成され、次にサブクラスがインスタンス化されます。したがって、PageBaseオブジェクトが構築されると、イベントハンドラーがLoadイベントにアタッチされ、Pageオブジェクトが起動するたびに呼び出されます。 Loadイベント。

于 2010-07-07T06:04:07.297 に答える