2009-08-03 4 views
0

デリゲートを保存すると(ページメソッドをポイントする)、セッション状態になり、ポストバックの後にそれを取得して実行します。デリゲートのターゲットは、現在のページオブジェクトではなく古いページオブジェクトです。とにかく、デリゲートのターゲットを変更して、現在のページオブジェクトのメソッドを実行しますか?c#ポストバックの間のデリゲート

私は静的なページメソッドを使用することを考えましたが、私は何をしようとしているオブジェクトを破るページのコントロールにアクセスできません。これはテキストボックスを更新します。

+1

私はそれが可能でさえあれば、全く推奨されていないと感じています。 –

答えて

1

は、デリゲートは、その最初のパラメータとして新しいページを取ってください、そして、あなたはそれを呼び出すときthisを渡します。

+0

これは、@ Mehrdad'sよりも優れたアプローチのようです。なぜなら、コードを読むときに意図を得る方が簡単だからです。 – codekaizen

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

あなたはすごく素晴らしいです! –

+0

これは最後の手段であることに注意してください。代わりに** static **メソッドの代理人を使用して、そのオブジェクトを引数として渡します。 –

6

これについて少し気になります。 Jon SkeetとMehrdadの提案はどちらもうまくいくでしょうが、ページインスタンスは要求が完了した後に破棄されることになっています。このデリゲートは、メモリリークと同等の.NETにつながる可能性があります。

おそらく、リフレクションを使用して、System.Reflection.MethodBaseまたはSystem.Reflection.MethodInfoオブジェクトをセッションに入れて、後で呼び出すことができます。

+0

これは、あなたが言った理由で、私は緊張します。私はむしろ、ページ全体ではなく、私たちが気にかけている国の一部だけを維持したいと思います。 –