2016-05-06 7 views
0

Ich habe ein Problem mit dem Überschreiben einer Methode. Ich habe eine Basisklasse mit benutzerdefiniertem Code erstellt, den ich während des OnLoad-Ereignisses ausführen möchte. Der Code in dieser überschriebenen Methode gilt für 90% der Seiten, die davon erben, aber auf einigen Seiten muss ich die Überschreibung außer Kraft setzen. Mein Problem ist, dass ich die OnLoad-Implementierung von System.Web.UI.Page noch ausführen muss. Wenn ich die Zeile base.OnLoad (e) in die zweite Klasse (siehe unten) einfüge, ruft sie die Logik von BasePageEdit auf, aber wenn ich sie entferne, wird das Page_Load-Ereignis nie aufgerufen. Wie kann ich überspringen über die Logik in BaseEditPages, und immer noch die Funktionalität von System.Web.UI.Page?Überschreiben Sie eine Überschreibung von onLoad (e), aber rufen Sie die niedrigste Basisimplementierung auf

public class BasePageEdit : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
    // I need this to raise the Page_Load Event! 
    base.OnLoad(e); // Calls System.Web.UI.Page OnLoad Event which I want. 

    // Logic that I want to run in ADDITION to base Implementation; 

    } 

    // Other classes and methods; 
} 

public class WebPageThatNeedsSpecialOnLoadImplementation : BasePageEdit 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
    // I need this to raise the Page_Load Event! 
    base.OnLoad(e); // If I include this, it runs the BasePageEdit, I don't want that... 
    // But I still need to run the System.Web.UI.Page onLoad event or Page_Load will not be called. 

    // Logic that I want to run INSTEAD of the logic from the override from BasePageEdit. 
    } 
} 

Vielen Dank Slaks! Ich bearbeite meine Frage, um zu zeigen, wie ich implementiert habe, damit andere, die diesen Beitrag sehen, den gleichen Weg implementieren können, wenn sie sich dafür entscheiden!

public class BasePageEdit : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
    BasePage_OnLoad(e); 

    // Logic that I want to run in ADDITION to base Implementation; 

    } 

    protected virtual void BasePage_OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
    } 

    // Other classes and methods; 
} 

public class WebPageThatNeedsSpecialOnLoadImplementation : BasePageEdit 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     BasePage_OnLoad(e); 

    // Logic that I want to run INSTEAD of the logic from the override from BasePageEdit. 
    } 
} 
+0

das ist nicht möglich; Erstellen Sie eine andere BaseClass, wenn Sie diese Anforderung auf vielen Seiten haben – techspider

Antwort

4

Sie können das nicht tun.

Sie können jedoch ein neues Verfahren in BasePageEdit machen, welche Anrufe nur seinebase.OnLoad, und dass stattdessen direkt von der abgeleiteten Klasse aufrufen.

+1

Das ist eine clevere Lösung. –