c# - studio - ¿Cómo puede un punto de interrupción en Page_Load NO ser golpeado?
punto de interrupcion no comprobado visual studio code (10)
Bueno, es posible que los VS tengan errores en ese momento (me ha pasado), pero nunca lo consigo de manera consistente.
Usted mencionó una redirección; si el Redireccionamiento ocurre durante la Inicio de Página, el evento de Carga nunca se llamará si la solicitud finalice. Esa podría ser una de las razones.
HTH.
Tengo un punto de interrupción establecido en el evento Page_Load de una página que nunca se ve afectado. No hay advertencias ni mensajes que indiquen que el punto de interrupción nunca puede alcanzarse, simplemente nunca recibe un impacto aunque la página se haya cargado correctamente.
Después de un inicio de sesión exitoso, el usuario es redirigido a esta página usando la propiedad DestinationPageUrl del control de inicio de sesión. Como se mencionó anteriormente, puedo iniciar sesión y acceder a esta página para que al menos esa parte funcione.
Si configuro un punto de interrupción en el evento Page_Load de la página de inicio de sesión (simplemente las cosas de aplicación web de muestra de ASP.NET anteriores), el punto de interrupción se verá afectado. Puedo ingresar al código, pero el evento page_load nunca se ve afectado y la página simplemente aparece. En esta secuencia, paso por los eventos page_load de login.aspx y site.master pero no la page_load que realmente quiero ver.
¿Alguna sugerencia? ¡Gracias!
El cambio de VS de la depuración al modo de Liberación funcionó para mí ... No sé por qué funcionó, cualquier experto podría sugerir
Es posible que los símbolos de depuración (archivos * .pdb) para ese evento de carga de página en particular no se hayan creado.
Intente limpiar su solución y asegúrese de estar en modo de depuración, luego realice un cambio simple en su archivo web.config (una nueva línea será suficiente) para forzar la recompilación de ASP.NET.
Me gustaría agregar una respuesta aquí para lo que me hizo experimentar este problema. Es uno de esos momentos "oh duh", pero me tuvo atrapado por más tiempo del que quisiera admitir ...
Tengo una página base personalizada llamada BasePage.cs
que se hereda de System.Web.UI.Page
, al igual que un estándar de [Whatever]Page.cs
El método OnLoad()
en BasePage.cs
realiza algunas verificaciones y validaciones personalizadas. Nada fuera de lo común aquí.
Mi problema era que me olvidaba de llamar a base.OnLoad(e);
desde dentro de una de mis comprobaciones lógicas dentro de OnLoad()
. En lugar de esto, simplemente estaba llamando return;
. Esto estaba causando que el método Page_Load()
del archivo de página real que estaba tratando de ver no fuera golpeado. Así que cambié mi código para llamar a base.OnLoad(e);
dentro de mi cheque y auge , se llamó a Page_Load()
como se esperaba.
Moraleja de la historia: estoy convencido de que soy tonto , con la esperanza de que ayude a alguien más en el camino :-).
Para que se ejecute Page_Load, uno de los siguientes debe ser verdadero:
Debe tener AutoEventWireup = "true" en la directiva @Page de la página aspx.
El controlador de eventos debe estar conectado explícitamente, normalmente en OnInit
ACTUALIZAR
Como se señaló en el comentario de @bzlm, el valor predeterminado para AutoEventWireup es "verdadero", por lo que de hecho se ejecutará también si falta el atributo AutoEventWireup en la directiva de la página.
Las versiones más antiguas de Visual Studio (2003 ciertamente, y quizás 2005) solían explícitamente cablear eventos y recomendaban que AutoEventWireup fuera falso .
Por lo que puedo ver, ya no creo que esto sea verdad. El cableado explícito se realizó con la línea:
this.Load += new System.EventHandler(this.Page_Load);
en el método InitializeComponent que fue generado por el diseñador y llamado desde el método OnInit
.
Si tiene AutoEventWireup = "false" en su directiva <% @Page%>, el método Page_Load no se adjuntará al evento Page.Load.
Solución bastante simple en mi caso. Compruebe la directiva de la página:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1_Delete.WebForm1" %>
El problema con mi código faltaba el código y los atributos heredados.
Tuve este comportamiento en una aplicación web VB.
La página Protected Sub Page_Load(sender As Object, e As EventArgs)
no tenía un Handles
después. Handles Me.Load
y Handles Me.Load
con AutoEventWireup="false"
.
La configuración de AutoEventWireup="true"
también funcionó como se mencionó anteriormente.
Tuve este mismo problema, pero ninguna de las respuestas aquí me ayudó. Entiendo que muchos problemas pueden dar este mismo problema. Así que estoy dando mi solución para cuando otros tengan el mismo problema que yo tuve. Sabía que podía establecer AutoEventWireup en verdadero. Quería saber cómo hacer que funcione cuando AutoEventWireup es falso ... en C #. Sabía que en VB solo puedo agregar la cláusula ''Mangos''.
Una imagen vale más que mil palabras, y también lo es el código de ejemplo, así que aquí está mi fragmento de código:
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
}
}
Un par de posibles respuestas aquí:
En realidad no vas a la página que crees que eres. Ver Por qué no se dispara Page_Load después de regresar de otra página usando ASP.NET - ergo epic embarazoso :)
El navegador que está utilizando ha almacenado la página de forma agresiva y no la está cargando. Asegúrese de que su navegador de preferencia tenga TODO el almacenamiento en caché desactivado.
La página se hereda de una clase base que eliminó el evento onload.
La página de marcas se hereda de una clase diferente de la que usted espera. (pasa mucho en copiar / pegar situaciones).