¿Por qué se dispara el evento Page_Load cuando quiero cargar otra página?

Soy muy nuevo en ASP, y tengo lo que parece una pregunta muy básica. Tengo el siguiente código en mi archivo default.aspx.cs:

        protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Get one day ago
            DateTime oneDayAgo = DateTime.Now.ToLocalTime().AddDays(-1);
            String strOneDayAgo = oneDayAgo.ToString();

            //Declare the query string
            String queryString = "Select * from Computers Where whenCreated >= '" + strOneDayAgo + "' ORDER BY whenCreated DESC";

            //Show the query being used to the user
            lblQueryUsed.Text = queryString;

            // Run the query and bind the resulting DataSet to the GridView control.
            DataSet ds = GetData(queryString);
            if (ds.Tables.Count > 0)
            {
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
        }
    }

Todo eso funciona muy bien, pero el problema es que cuando un usuario hace clic en un enlace en esa página para ir a otra página llamada Reports.aspx, se activa el mismo evento Page_Load y todos los controles (lblQueryUsed, GridView1) se establecen en NULL. por alguna razón, y obtengo una excepción.

¿Por qué se carga el evento Page_Load para default.aspx cuando quiero cargar Reports.aspx? ¿Por qué los controles son nulos?

Muchas gracias por la ayuda.

EDITAR: Aquí está el código completo de esa página, ¿qué más necesitas?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;
using System.Data.SqlClient;
using Sorter;
using System.Data;

namespace AD_watcher_web_app
{
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Get one day ago
            DateTime oneDayAgo = DateTime.Now.ToLocalTime().AddDays(-1);
            String strOneDayAgo = oneDayAgo.ToString();

            //Declare the query string
            String queryString = "Select * from Computers Where whenCreated >= '" + strOneDayAgo + "' ORDER BY whenCreated DESC";

            //Show the query being used to the user
            lblQueryUsed.Text = queryString;

            // Run the query and bind the resulting DataSet to the GridView control.
            DataSet ds = GetData(queryString);
            if (ds.Tables.Count > 0)
            {
                GridView1.DataSource = ds;
                GridView1.DataBind();
            }
        }
    }

    protected void Label1_PreRender(object sender, EventArgs e)
    {
        //Populate the labels
        lblCompCount.Text = GridView1.Rows.Count.ToString();
        lblTimeRun.Text = DateTime.Now.ToLocalTime().ToString();
    }

    ///////////////////////METHODS///////////////////////

    DataSet GetData(String queryString)
    {
        // Set the connection string
        SqlConnectionStringBuilder conBuilder = new SqlConnectionStringBuilder();
        conBuilder.DataSource = "dbsql01dev.llnl.gov";
        conBuilder.InitialCatalog = "XloadDB";
        conBuilder.IntegratedSecurity = true;

        String connectionString = conBuilder.ConnectionString;

        //Declare a new dataset
        DataSet ds = new DataSet();

        try
        {
          // Connect to the database and run the query.
          SqlConnection connection = new SqlConnection(connectionString);        
          SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

          // Fill the DataSet.
          adapter.Fill(ds);
        }
        catch(Exception ex)
        {
          // The connection failed. Display an error message.
            lblExceptions.Text = ex.ToString();
            lblExceptions.Visible = true;
        }
        return ds;
      }
}
}

preguntado el 03 de mayo de 12 a las 20:05

¿El enlace es un enlace del lado del servidor? -

¿Los enlaces se manejan en el servidor o en el cliente? En otras palabras, ¿tiene un controlador para sus eventos de clic en el servidor y realiza una Response.Redirect, o son estos hipervínculos simples? -

Pegue las piezas relevantes del aspx -

Si el enlace provoca devoluciones de publicaciones, su página se cargará nuevamente. -

Mi enlace se ve así y está en Site.Master: -

1 Respuestas

Para que los controles del lado del servidor funcionen, la página debe recargarse antes de que se activen los eventos de control.

Esto es parte de ciclo de vida de la página.

Este comportamiento también ocurrirá en los enlaces del lado del servidor: una vez que se produce una devolución de datos, la página se vuelve a cargar y page_load incendios

Para evitar esto, convierta sus enlaces en enlaces puros del lado del cliente.

Entonces no runat="server", pero HTML adecuado <a href="">link</a> campo de golf.

contestado el 03 de mayo de 12 a las 20:05

Me temo que el OP no está publicando el código completo y está haciendo otra cosa. No hay ninguna razón por la que estos controles estén configurados como nulos en Page_Load incluso si está haciendo Response.Redirect y no verificando IsPostback. - Ícaro

Así que aquí está el ASP que conforma la barra de menú en mi Site.Master: - Dbloom

@Icarus - Este sigue siendo un control del lado del servidor - <asp:Menu>. @Dbloom: así es como funcionan los formularios web. Cuando utiliza un control del lado del servidor, se produce una devolución de datos y page_load carreras. Es por eso IsPostBack existe. - Oded

Pero tengo la declaración if (!IsPostBack), y Postback se muestra como False, entonces, ¿eso no significa que no se está produciendo una devolución de datos? Lo siento, el ciclo de vida de la página sigue siendo confuso para mí. - Dbloom

He estado jugando tratando de hacer que los enlaces estén del lado del cliente, pero la línea está en la parte superior de mi Site.Master, entonces eso significa que todo lo encerrado en el ¿la etiqueta estará del lado del servidor? - Dbloom

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.