simple page net example code aspx asp c# asp.net page-lifecycle

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"]); } }