为什么事件处理程序方法随机停止工作?

时间:2009-01-26 15:58:18

标签: c# asp.net event-handling viewstate

为什么事件处理程序会在某一天工作,然后在第二天停止工作而不进行任何代码更改?

我已经多次遇到这个问题,但总是要玩游戏,不知怎的,事件处理程序神奇地再次运作。以下是今天再次发生在我身上的一个例子。你知道解决这类问题的快捷方法吗?

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">
    Link
</asp:LinkButton>

我在这个方法上设置了一个断点,它永远不会被击中。

protected void LinkButton1_Click(object sender, EventArgs e)
{
    // snip
}

我尝试过清理解决方案,重建所有内容等等。有什么见解吗?

编辑:

是的,AutoEventWireup设置为true。没有进行任何其他系统/开发环境更改。我正在使用.NET 3.5。

4 个答案:

答案 0 :(得分:1)

我知道您说没有代码发生过变化,但您应该检查以确保此页面上的AutoEventWireup设置为true。另请检查web.config以确保整个应用程序的此属性不是false

编辑:

你能做的最好的事情就是不要依赖AutoEventWireup就像你在这里一样。您真的应该在页面的OnInit覆盖中添加显式事件连接,因为这样更清晰可以提供更好的性能。我不确定你为什么会看到你看到的错误,但我几乎可以保证,如果你这样做,它们会消失:

protected override void OnInit(EventArgs e)
{
    this.LinkButton1.Click += new EventHandler(this.LinkButton1_Click);
}

答案 1 :(得分:1)

如果这是一个.NET 1.1应用程序,请检查在OnInit方法中您的事件处理程序是否存在。有一个VS.2003错误,有时会剥夺事件。如果它是一个2.0应用程序,我发现自定义控件的问题,设计者抱怨干扰pagename.aspx.designer.cs(或.vb)中的事件生成。检查错误列表并查找“生成设计器文件失败”的任何警告。这也适用于.NET 3.5。

答案 2 :(得分:0)

您的aspnet_client文件夹是否与服务器上安装的.NET框架版本匹配?如果您使用的是2.0之前的.NET框架,则已知此框架与aspnet_client脚本之间的版本不匹配会导致问题。

答案 3 :(得分:0)

Kieran对他的评论说得对......实际上有些事情发生了变化!大哇那里......

TFS签到警报最终出现在我的垃圾邮件文件夹中,愚蠢的我没有对文件的历史记录进行比较。在同事的代码隐藏中,EnableViewState被设置为false。

作为旁注:他这样做是因为它将响应大小降低到启用viewstate时的10%。我最后通过使用querystring变量代替事件处理来解决同样的问题。

但是,感谢所有的想法。好事我没有浪费太多时间在这件事上。