c# - page - events asp net
¿Cómo ejecutar Page_Load() en la clase base de la página? (6)
En lugar de un método Page_Load (), anule OnLoad () y llame a base.OnLoad () en PerformanceFactsheet
Tengo la siguiente clase de página PerformanceFactsheet.aspx.cs
public partial class PerformanceFactsheet : FactsheetBase
{
protected void Page_Load(object sender, EventArgs e)
{
// do stuff with the data extracted in FactsheetBase
divPerformance.Controls.Add(this.Data);
}
}
donde FactsheetBase se define como
public class FactsheetBase : System.Web.UI.Page
{
public MyPageData Data { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// get data that''s common to all implementors of FactsheetBase
// and store the values in FactsheetBase''s properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}
El problema es que la carga de página de FactsheetBase no se está ejecutando.
¿Alguien puede decirme qué estoy haciendo mal? ¿Hay una mejor manera de obtener el resultado que estoy buscando?
Gracias
Haga que la página se cargue de forma pública y llámela de la siguiente manera:
this.myPageOrUserControl.Page_Load(null, EventArgs.Empty);
Nos enfrentamos al problema similar. Todo lo que necesita hacer es registrar el controlador en el constructor. :)
public class FactsheetBase : System.Web.UI.Page
{
public FactsheetBase()
{
this.Load += new EventHandler(this.Page_Load);
}
public MyPageData Data { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// get data that''s common to all implementors of FactsheetBase
// and store the values in FactsheetBase''s properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}
Otro enfoque sería anular OnLoad (), que es menos preferido.
public class FactsheetBase : System.Web.UI.Page
{
public FactsheetBase()
{
}
public MyPageData Data { get; set; }
protected override void OnLoad(EventArgs e)
{
//your code
// get data that''s common to all implementors of FactsheetBase
// and store the values in FactsheetBase''s properties
this.Data = ExtractPageData(Request.QueryString["data"]);
base.OnLoad(e);
}
}
Uhm, tal vez me equivoque, pero creo que esto se debe a la herencia: está sobrescribiendo el método FactsheetBase Page_Load en la clase derivada.
Para ejecutarlo debes hacer algo como
public partial class PerformanceFactsheet : FactsheetBase
{
protected void Page_Load(object sender, EventArgs e)
{
base.Page_Load( sender, e );
// do stuff with the data extracted in FactsheetBase
divPerformance.Controls.Add(this.Data);
}
}
EDIT: n8wrl definitivamente le dio una solución más limpia (no soy un programador ASPX).
prueba este
public partial class PerformanceFactsheet : FactsheetBase
{
public PerformanceFactsheet()
{
this.Load += new EventHandler(this.Page_Load);
}
protected void Page_Load(object sender, EventArgs e)
{
divPerformance.Controls.Add(this.Data);
}
}
public abstract class FactsheetBase : System.Web.UI.Page
{
public MyPageData Data { get; set; }
public FactsheetBase()
{
this.Load += new EventHandler(this.Page_Load);
}
new protected void Page_Load(object sender, EventArgs e)
{
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}
prueba este:
public partial class PerformanceFactsheet : FactsheetBase
{
protected override void Page_Load(object sender, EventArgs e)
{
base.Page_Load(sender, e);
// do stuff with the data extracted in FactsheetBase
divPerformance.Controls.Add(this.Data);
}
}
public class FactsheetBase : System.Web.UI.Page
{
public MyPageData Data { get; set; }
protected virtual void Page_Load(object sender, EventArgs e)
{
// get data that''s common to all implementors of FactsheetBase
// and store the values in FactsheetBase''s properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}