Как выполнить функцию Page_Load() в базовом классе страницы?
У меня есть следующий класс 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);
}
}
где FactsheetBase определяется как
public class FactsheetBase : System.Web.UI.Page
{
public MyPageData Data { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
// get data that common to all implementors of FactsheetBase
// and store the values in FactsheetBase properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}
Проблема заключается в том, что файл InfoheetBase Page_Load не выполняется.
Может ли кто-нибудь сказать мне, что я делаю неправильно? Есть ли лучший способ получить результат, который я получаю после?
Спасибо
Ответы
Ответ 1
Мы столкнулись с аналогичной проблемой. Все, что вам нужно сделать, это просто зарегистрировать обработчик в конструкторе.:)
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 common to all implementors of FactsheetBase
// and store the values in FactsheetBase properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}
Другим подходом было бы переопределить OnLoad(), который менее предпочтителен.
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 common to all implementors of FactsheetBase
// and store the values in FactsheetBase properties
this.Data = ExtractPageData(Request.QueryString["data"]);
base.OnLoad(e);
}
}
Ответ 2
Вместо метода Page_Load() переопределите OnLoad() и вызовите base.OnLoad() в PerformanceFactsheet
Ответ 3
Ум, я, возможно, ошибаюсь, но я считаю, что это связано с наследованием: вы переписываете метод FactsheetBase Page_Load в производном классе.
Чтобы выполнить его, вы должны сделать что-то вроде
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 определенно дал вам более чистое решение (я не программист ASPX).
Ответ 4
попробуйте этот
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"]);
}
}
Ответ 5
попробуйте следующее:
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 common to all implementors of FactsheetBase
// and store the values in FactsheetBase properties
this.Data = ExtractPageData(Request.QueryString["data"]);
}
}