2010-12-02 11 views
1

Meine Frage bezieht sich auf das Abrufen von Attributen über eine Methode, die als Teil eines Delegaten _ aufgerufen wird [z. Page.OnLoad oder eine Button_Click] _Das Reflektieren über die Page_Load-Methode gibt null zurück

Ich habe eine Methode Attribut [MyMethodAttribute (PropertyOne, PropertyTwo)] über das _ [Page_Load] _ oder _ [AnyWebControl_Event] _. Dieses Methodenattribut muss zur Laufzeit über die Methode abgefragt werden, auf der es abgelegt wurde. Die Methode befindet sich im Code-Behind einer beliebigen Webseite. Alle Webseiten stammen von BaseWebPage. Das Ereignis kann entweder ein Seitenlade- oder ein Post-Back-Ereignis sein. Je nachdem, ob das Ereignis durch das Laden der Seite oder ein Postback ausgelöst wurde, erhalte ich ein Handle für das Steuerelement [eine Seite oder das Postback] und füge meine Methode [MyMethod] zur Ausführung hinzu.

_eventControl = GetPostBackControl(page); //__EVENTTARGET or any control 
    if (_eventControl != null) // this is a postback control for any page 
    { 
     _eventControl.Load += new EventHandler(MyMethod); 
    } 
    else // this is PageLoad method for any page 
    { 
     _eventControl = page; 
     page.Load += new EventHandler(MyMethod); 
    } 

Nach dem ich versuche, das Ereignis [z. Page_Load], die das Laden der Seite ausgelöst hat. Dies ist, wo ich nicht in der Lage bin, die Methode in den Griff zu bekommen und alle möglichen Möglichkeiten auszuprobieren.

Eine der Möglichkeiten bestand darin, abzufragen, welcher Ereignisdelegat das Laden oder Postback ausgelöst hat. Auf das Ereignis kann jedoch nicht von außerhalb der Klasse zugegriffen werden. Daher kann ich MyDelegate.GetInvocationList() nicht verwenden, da dies null zurückgibt.

Jede Hilfe wird geschätzt.


Nach einigem Aufwand habe ich festgestellt, dass __EVENTARGUMENT mir den Methodennamen liefert. Ich habe jetzt ein anderes Problem. Wenn ich über die ASPX-Seite für die Methode Page Load nachdenke, wird Null zurückgegeben. Irgendwelche Ideen?


Pageload ist eine geschützte Methode, und ich verwendete Public BindingFlags. Also nach der Verwendung von NonPublic | Instanzflag Ich bin in der Lage, die Methode_Load mit relfection zu erreichen

+0

Ich habe die Antwort auf mein Problem gefunden. Die Page_Load-Methode ist geschützt und ich verwendete das Öffentliche Bindungsflag. Mein Problem ist gelöst. – ank07

Antwort

1

Nach einigem Aufwand habe ich festgestellt, dass __EVENTARGUMENT mir den Methodennamen liefert.


Pageload ist eine geschützte Methode, und ich verwendete Public BindingFlags. Also nach der Verwendung von NonPublic | Instanz-Flag Ich bin in der Lage, die Methode_Load-Methode mit relfection

0

Was ist mit Page.IsPostback? Wenn IsPostback false ist, wurde die Seitenladung nicht durch ein Postback ausgelöst und ist eine Neuladung.

+0

IsPostback wird Informationen bereitstellen, ob es Postback ist. Aber es wird keine Informationen darüber geben, welche Kontrolle und welches Ereignis es gibt. Ich fand, dass ich genau wie __EVENTTARGET den Ereignisnamen mit __EVENTARGUMENT finden kann. So habe ich die Antwort teilweise gefunden. – ank07