如何在Page_Load上的断点不被击中
本文关键字:断点 Page Load | 更新日期: 2023-09-27 17:50:42
我在页面的Page_Load事件上设置了一个断点,该断点永远不会被命中。没有警告或消息表明断点可能永远不会被击中,它只是永远不会被击中,即使页面加载成功。
成功登录后,使用登录控件的DestinationPageUrl属性将用户重定向到该页。如上所述,我可以登录并进入这个页面,所以至少这部分是有效的。
如果我在登录页面的Page_Load事件上设置一个断点(只是普通的旧ASP. js)。. NET示例Web应用程序(这里),断点将被击中。我可以进入代码,但page_load事件从未被击中,页面只是出现。在这个序列中,我逐步处理登录的page_load事件。Aspx和站点。而不是我真正想看到的page_load
有什么建议吗?谢谢!
要执行Page_Load,必须满足下列条件之一:
-
你必须在aspx页面的@Page指令中设置AutoEventWireup="true"
-
事件处理程序必须显式地连接,通常在OnInit
正如@bzlm的评论所指出的,AutoEventWireup的默认值是"true",所以事实上,如果页面指令中缺少AutoEventWireup属性,它也会被执行。
旧版本的Visual Studio(当然是2003年,也可能是2005年)习惯于显式地连接事件,并建议将AutoEventWireup设置为false。
在我看来,我认为这不再是真的了。显式的连接是通过以下行完成的:
this.Load += new System.EventHandler(this.Page_Load);
中的InitializeComponent方法,该方法由设计器生成并从OnInit
方法调用。
这里有几个可能的答案:
-
您实际上并没有进入您认为的页面。看看为什么Page_Load不触发从另一个页面使用ASP回来后。. NET -因此史诗般的尴尬:)
-
您正在使用的浏览器已经积极缓存页面并且没有加载它。请确保您选择的浏览器已禁用所有缓存。
-
页面从基类继承,该基类取消了onload事件。
-
标记页是从一个与您期望的不同的类继承的。(在复制/粘贴情况下经常发生)
如果在你的<% @Page %>指令中设置了AutoEventWireup="false",那么Page_Load方法将不会被附加到页面上。负载的事件。
有可能调试符号(*。
没有为特定的Page_Load事件构建pdb文件。尝试清理您的解决方案并确保您处于调试模式,然后对您的web进行简单更改。配置文件(一个新的行就可以了),以强制ASP。. NET重新编译。
我在一个VB web应用程序中有这个行为。
Protected Sub Page_Load(sender As Object, e As EventArgs)
后没有Handles
。我添加了Handles Me.Load
,这与AutoEventWireup="false"
一起工作。
设置AutoEventWireup="true"
也可以如上所述。
我也遇到过同样的问题,但是这里的答案没有一个对我有帮助。我理解很多问题可能会给出同样的问题。所以当别人遇到和我一样的问题时,我给出了我的解决方案。我知道我可以将AutoEventWireup设置为true。我想知道如何使它工作时,AutoEventWireup是假的。在c#。我知道在VB中我可以添加'Handles'子句。
一张图片胜过千言万语,示例代码也是如此,下面是我的代码片段:
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
}
}
我想在这里添加一个导致我遇到这个问题的答案。这是那些"哦,呸"的时刻之一,但它让我困在那里的时间比我想承认的要长…
我有一个名为BasePage.cs
的自定义基页,它继承自System.Web.UI.Page
,就像标准[Whatever]Page.cs
一样。BasePage.cs
中的OnLoad()
方法执行一些自定义检查和验证。没有什么不寻常的。
我的问题是,我忘记从OnLoad()
内的一个逻辑检查中调用base.OnLoad(e);
。而不是这样,我只是简单地调用return;
。这导致我试图查看的实际页面文件的Page_Load()
方法没有被击中。所以我改变了我的代码,在我的检查中调用base.OnLoad(e);
和boom, Page_Load()
按预期被调用。
这个故事的寓意:我承认我的愚蠢,希望它能帮助别人的道路:-)。
好吧,这是可能的VS可能有bug(它发生在我身上),但我从来没有得到一致。
你提到了重定向;如果重定向发生在页面初始化期间,则在请求结束时永远不会调用Load事件。这可能是一个原因。
HTH .
改变VS从调试到发布模式为我工作....不知道为什么它工作的原因,任何一个专家可能会建议
解决方案非常简单,在我的情况下。检查Page指令:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1_Delete.WebForm1" %>
我的代码的问题是缺少代码后面的 &继承属性。
虽然这很蠢,但如果能节省一两分钟的话。我在发布中有VS…一旦我将其更改为Debug,它就像预期的那样启动了。一时想不明白我又回过头来,看见了,就打了我的头....