2009-08-03 1 views
0

Когда я храню делегат (который указывает на метод страницы) в состоянии сеанса, вытащить его после обратной передачи и выполнить его, целью делегата является объект старой страницы, а не текущий, в любом случае изменить цель делегата так, чтобы он выполнял метод на текущем объекте страницы?C# Делегаты через обратную передачу

Я думал об использовании статического метода страницы, но затем у меня нет доступа к элементам управления на странице, которые побеждают объект того, что я пытаюсь сделать, что обновляет текстовое поле.

+1

У меня есть сильное чувство, что, если это возможно, это совсем не рекомендуется. –

ответ

1

сделать ваш делегат принять новую страницу в качестве первого параметра, и при вызове его пройти this.

+0

Это похоже на лучший подход, чем @ Mehrdad's, поскольку легче читать, когда вы читаете код. – codekaizen

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

ты фриккин потрясающий! – 2009-08-03 16:32:38

+0

Обратите внимание, что это означает последнее средство. Вместо этого я бы использовал делегат вместо ** static ** и передал объект в качестве аргумента. –

6

Я немного нервничаю по этому поводу. Предложения Jon Skeet и Mehrdad будут работать (конечно), но экземпляры страниц должны быть удалены после завершения запроса. Этот делегат может помешать этому, что приведет к эквиваленту .Net, эквивалентному утечке памяти.

Возможно, вы могли бы использовать отражение и поместить в сеанс объект System.Reflection.MethodBase или System.Reflection.MethodInfo для вызова позже.

+0

Это заставляет меня нервничать по причинам, которые вы указали. Я предпочел бы сохранить только ту часть государства, о которой мы заботимся, а не всю страницу. –