2009-08-03 8 views
0

Wenn ich einen Delegaten (der auf eine Page-Methode zeigt) im Sitzungszustand, retrive es nach einem Postback und führen Sie das Ziel des Delegate ist das alte Seitenobjekt und nicht die aktuelle, ist da Wie auch immer, um das Ziel des Delegaten zu ändern, damit es die Methode für das aktuelle Seitenobjekt ausführt?C# Delegaten über Postback

Ich habe über die Verwendung einer statischen Seite Methode gedacht, aber dann habe ich keinen Zugriff auf die Steuerelemente auf der Seite, die das Objekt von dem, was ich versuche, zu vereiteln, die ein Textfeld aktualisiert.

+1

Ich habe das starke Gefühl, dass, wenn das überhaupt möglich ist, es überhaupt nicht empfohlen wird. –

Antwort

1

Machen Sie Ihre Delegierten die neue Seite als ersten Parameter übernehmen, und wenn Sie es this passieren nennen.

+0

Dies scheint ein besserer Ansatz zu sein als @Mehrdads, da es einfacher ist, die Absicht zu bekommen, wenn Sie den Code lesen. – codekaizen

3
delegateInstance.Method.Invoke(obj, arguments); 
+0

du bist super geil! –

+0

Beachten Sie, dass dies als letzter Ausweg gemeint ist. Ich würde stattdessen einen Delegaten für eine ** statische ** -Methode verwenden und das Objekt als Argument übergeben. –

6

Ich bin ein bisschen nervös darüber. Die Vorschläge von Jon Skeet und Mehrdad funktionieren (natürlich), aber Seiteninstanzen sollen nach dem Abschluss einer Anfrage entsorgt werden. Dieser Delegat könnte verhindern, dass dies geschieht, was zu dem .Net-Äquivalent eines Speicherlecks führt.

Vielleicht könnten Sie Reflexion verwenden und ein System.Reflection.MethodBase oder System.Reflection.MethodInfo Objekt in die Sitzung versetzen, um später stattdessen aufzurufen.

+0

Das macht mich nervös, aus den von Ihnen genannten Gründen. Ich würde lieber nur den Teil des Staates beibehalten, der uns am Herzen liegt, nicht die ganze Seite. –