2011-03-19 19 views
7

¿Por qué DisplayUsers(); no funciona?Page_Load vs OnLoad

Mi página base es:

public class adminPage : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     if (User.Identity.IsAuthenticated == false) { Response.Redirect("~/Account/login.aspx?ReturnUrl=/admin"); }; 
     if (!(User.IsInRole("admin") || User.IsInRole("super user"))) { Response.Redirect("/"); }; 
    }   
    } 

mi clase es

public partial class users : adminPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    {       
     string sName; 
     adminGeneralData.GetToolData(2, out sName); 
     pageH1.Text = sName; 

     DisplayUsers(); 
    } 

    protected void DisplayUsers() 
    { 
     DataSet ds = userData.GetUsersData(); 
     userList.DataSource = ds; 
     userList.DataBind(); 
    } 
} 

pero DisplayUsers() no funciona,

+1

Realmente no entiendo el uso de UI.Page como baseclass en lugar de hacer una lógica comercial real. Esta es una aplicación de presentación web. Toda la lógica de base debe separarse de la presentación. – Independent

+0

@dingir - ¡dame un ejemplo! – eyalb

+3

Use 'PascalCase' para el espacio de nombres, escriba nombres, etcétera. Me lo puedes agradecer después. –

Respuesta

16

Si no recuerdo mal, tendrá que llamar a la base el evento OnLoad de la clase para registrar el evento Page_Load correctamente:

protected override void OnLoad(EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated == false) { Response.Redirect("~/Account/login.aspx?ReturnUrl=/admin"); }; 
    if (!(User.IsInRole("admin") || User.IsInRole("super user"))) { Response.Redirect("/"); }; 

    base.OnLoad(e); 
} 

Aquí hay un par de buenas lecturas:

1

En el código se ejecuta, no hay ninguna diferencia, pero

  • AutoEventWireup deberían poder (generalmente en marcado) para cada página
  • Page_Load (y other events como éste) utiliza eventos automáticos de suscripción mechanism, que utiliza la reflexión, lo que golpea ligeramente el rendimiento

Yo personalmente recomiendo para anular OnLoad(), simplemente no se olvide de llamar base.

3

Según Performance Tips and Tricks en aplicaciones .NET:

evitar los Característica AutoEventWireup

lugar de confiar en AutoEventWireup, anulan los eventos de la página. Por ejemplo, en lugar de escribir un método Page_Load(), intente sobrecargar el método de vacío público OnLoad(). Esto permite que el tiempo de ejecución tenga que hacer un CreateDelegate() para cada página.

Cuestiones relacionadas