Page_Load上的断点如何才能被击中?

时间:2011-04-18 18:54:28

标签: c# asp.net .net-4.0

我在页面的Page_Load事件上设置了一个断点,它永远不会被击中。没有警告或消息表明断点可能永远不会被击中,即使页面成功加载也不会被击中。

成功登录后,用户将使用登录控件的DestinationPageUrl属性重定向到此页面。如上所述,我可以登录并访问此页面,因此至少该部分可以正常工作。

如果我在Login页面的Page_Load事件上设置了一个断点(这里只是普通的旧ASP.NET示例Web应用程序),那么断点就会受到影响。我可以进入代码但是page_load事件永远不会被命中,页面就会出现。在这个序列中,我逐步完成login.aspx和site.master的page_load事件,但不是我真正想看的page_load。

有什么建议吗?谢谢!

10 个答案:

答案 0 :(得分:16)

这里有几个可能的答案:

  1. 您实际上并没有进入您认为自己的页面。请参阅Why is Page_Load not firing after coming back from another page using ASP.NET - ergo epic embarrassment :)

  2. 您正在使用的浏览器已经过激活地缓存了页面而未加载它。确保您选择的浏览器禁用了所有缓存。

  3. 该页面继承自一个摆脱onload事件的基类。

  4. Thee标记页面继承自您期望的类别。 (在复制/粘贴情况下会发生很多事情。)

答案 1 :(得分:15)

为了执行Page_Load,必须满足以下条件之一:

  • 您必须在aspx页面的@Page指令中使用AutoEventWireup =“true”。

  • 事件处理程序必须显式连接,通常在OnInit

<强>更新

正如@ bzlm的评论所指出的,AutoEventWireup的默认值是“true”,所以实际上如果页面指令中缺少AutoEventWireup属性,它也会被执行。

旧版本的Visual Studio(2003年当然,也许是2005年)用于explicitly wireup events, and recommend to set AutoEventWireup to false

从我所看到的情况来看,我不再认为这是真的。使用以下行完成显式连接:

this.Load += new System.EventHandler(this.Page_Load);

在由设计器生成并从OnInit方法调用的InitializeComponent方法中。

答案 2 :(得分:7)

如果您的&lt;%@Page%&gt;中有AutoEventWireup =“false”指令Page_Load方法不会附加到Page.Load事件。

答案 3 :(得分:1)

我在VB网络应用中遇到过这种情况。

Protected Sub Page_Load(sender As Object, e As EventArgs)之后没有Handles。我添加了Handles Me.Load,这与AutoEventWireup="false"一起使用。

设置AutoEventWireup="true"也如上所述。

答案 4 :(得分:1)

我有同样的问题,但这里的答案都没有帮助我。我理解许多问题可能会给出同样的问题。因此,当我的其他人遇到同样的问题时,我会给出解决方案。我知道我可以将AutoEventWireup设置为true。我想知道当AutoEventWireup为false时如何使其工作..在C#中。我在VB中知道我可以添加&#39; Handles&#39;子句。

图片胜过千言万语,示例代码也是如此,所以这里是我的代码片段:

public partial class Login : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e) // i added this method.
    {
        Load += new EventHandler(Page_Load);
        base.OnInit(e);
    }
    protected void Page_Load(object sender, EventArgs e)
    { // code for the Page Load event here
    }
}

答案 5 :(得分:0)

嗯,当时VS可能有些错误(这对我来说已经发生了),但我从来没有这么做过。

你提到了重定向;如果在Page Init期间发生重定向,则在请求结束时永远不会调用Load事件。这可能是一个原因。

HTH。

答案 6 :(得分:0)

可能没有构建该特定Page_Load事件的调试符号(* .pdb文件)。

尝试清理解决方案并确保您处于调试模式,然后对web.config文件进行简单更改(新行将执行)以强制ASP.NET重新编译。

答案 7 :(得分:0)

将VS从调试更改为发布模式对我有用....不知道其工作原因,任何一位专家都可能建议

答案 8 :(得分:0)

在我的案例中,解决方案非常简单。 检查页面指令:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1_Delete.WebForm1" %>

我的代码的问题是缺少 codebehind &amp; 继承属性。

答案 9 :(得分:0)

我想在此处添加一个答案,了解导致我遇到此问题的原因。这是“噢噢”时刻之一,但它让我停留的时间超过了我想承认的时间......

我有一个名为BasePage.cs的自定义基页,它继承自System.Web.UI.Page,就像标准[Whatever]Page.cs一样。 OnLoad()中的BasePage.cs方法会执行一些自定义检查和验证。这里没什么不寻常的。

我的问题是我忘记在base.OnLoad(e);内的一个逻辑检查中调用OnLoad()。而不是这个,我只是打电话给return;。这导致我尝试查看的实际页面文件的Page_Load()方法未被命中。所以我将代码更改为在我的支票中调用base.OnLoad(e);热潮Page_Load()按预期调用。

故事的道德:我正在迷上 dumb ,希望它能帮助其他人:-)。