6

除了 MyPage.aspx 和 MyPage.aspx.cs 和 MyPage.aspx.designer.cs 之外,我还试图通过创建第三部分文件来添加一些非生产测试代码。我将第三个文件称为 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 部分文件中,事件注册并执行。陌生人,当我反编译程序集并进行比较时,该类似乎反编译为相同的代码。

可能无关的线索:

  • 该页面使用 autoeventwireup="true"(如果我尝试将我的事件注册到我的 Page_LoadComplete,我仍然会得到相同的行为)
  • 该应用程序是一个 Web 应用程序(即使用 proj 文件)
  • 部分文件确实编译(如果我在部分文件中引入错误,它将阻止编译,所以我确定部分文件确实被编译)
  • 我使用不同的事件(PreRender 等)得到相同的结果
4

1 回答 1

2

这很奇怪,我只是做了同样的实验,所有的事件都被触发了,我有同样的条件,web application,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 回答