wake-up-neo.com

Ausführen von Page Load () in der Basisklasse von Page

Ich habe die folgende PerformanceFactsheet.aspx.cs-Seitenklasse

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

wobei FactsheetBase definiert ist als

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

Das Problem ist, dass das Page Load von FactsheetBase nicht ausgeführt wird.

Kann mir jemand sagen, was ich falsch mache? Gibt es einen besseren Weg, um das gewünschte Ergebnis zu erzielen?

Vielen Dank

30
DaveDev

Wir hatten ein ähnliches Problem. Alles, was Sie tun müssen, ist den Handler im Konstruktor registrieren. :)

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

Ein anderer Ansatz wäre, onLoad () außer Kraft zu setzen, was weniger bevorzugt wird.

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);
    }
}
49

Überschreiben Sie statt einer PageLoad () - Methode OnLoad () und rufen Sie base.OnLoad () in PerformanceFactsheet auf 

7
n8wrl

probier diese

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

Ich bin vielleicht falsch, aber ich glaube, das liegt an der Vererbung: Sie überschreiben die FactsheetBase-Methode PageLoad in der abgeleiteten Klasse.

Um es ausführen zu lassen, sollten Sie etwas tun

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 hat definitiv eine sauberere Lösung (Ich bin kein ASPX-Programmierer).

4
NeXuS

Machen Sie das Laden der Seite öffentlich, und rufen Sie sie auf eine andere Weise von der anderen Seite aus an:

this.myPageOrUserControl.Page_Load(null, EventArgs.Empty);
0
Tyler S. Loeper

probier diese:

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