6

MyPage.aspx と MyPage.aspx.cs と MyPage.aspx.designer.cs に加えて、3 番目の部分ファイルを作成して、非運用テスト コードを追加しようとしていました。3 番目のファイルを MyPage.aspx.TEST.cs と呼びました

部分ファイル MyPage.aspx.TEST.cs に、次のように記述しました。

protected override void OnInit(EventArgs e)
{
    Page.LoadComplete += RunTest;
    base.OnInit(e);
}
//Assert.

public void RunTest(object sender, EventArgs e)
{
    //Clever assertions
}

コードがコンパイルされ、コードを逆コンパイルすると、OnInit オーバーライドと RunTest メソッドが表示されます。

しかし、ページを実行すると、イベントは登録も実行もされず、ブレークポイントを設定することもできません。

そのコードを MyPage.aspx.TEST.cs 部分クラスから MyPage.aspx.cs 部分ファイルに移動すると、イベントが登録されて実行されます。見知らぬ人、アセンブリを逆コンパイルして diff を実行すると、クラスが同じコードに逆コンパイルされているように見えます。

関係のない可能性のある手がかり:

  • ページは autoeventwireup="true" を使用します (イベントを Page_LoadComplete に登録しようとすると、同じ動作が得られます)
  • アプリケーションは Web アプリケーションです (つまり、proj ファイルを使用します)。
  • 部分ファイルはコンパイルされます (また、部分ファイルにエラーを導入すると、コンパイルが妨げられるため、部分ファイルがコンパイルされることは確実です)。
  • 異なるイベント (PreRender など) を使用しても同じ結果が得られます
4

1 に答える 1

2

これは奇妙です。同じ実験を行ったばかりで、すべてのイベントが発生しています。同じ条件、Web アプリケーション、autoeventwireup = true があります。

別の基本ページから継承していますか?

これは私の部分クラスです:

public partial class _Default
{
    protected override void OnInit(EventArgs e)
    {
        this.LoadComplete += RunTest;
        this.Load += new EventHandler(_Default_Load);
        base.OnInit(e);
    }

    void _Default_Load(object sender, EventArgs e)
    {
        //throw new NotImplementedException();
    }

    void RunTest(object sender, EventArgs e)
    {
        //throw new NotImplementedException();
    }

    protected override void OnPreRender(EventArgs e)
    {
        this.Response.Write("omfgggg");
        this.lblMyMessageTest.Text = "omfg2";
        base.OnPreRender(e);
    }
}

すべてのイベントが機能します。コメントを外すと、//throw new NotImplementedException();期待どおりに例外が発生します。

次のことを試してください。

  • 部分ページ クラスの名前が同じであることを確認します
  • に変更Page.LoadComplete += RunTest;してみてくださいthis.LoadComplete += RunTest;
  • 例外が発生したときにページの応答を終了していないことを確認してください
  • カスタム HTTP モジュールがある場合は、それを無効にしてみてください。イベントに干渉している可能性があります。
于 2012-06-19T22:41:39.733 に答える