Действительно ужасная идея хранить LinkButton в сессии. Я даже не могу себе представить проблемы, которые могут вызвать. По крайней мере, LinkButton имеет ссылку (посредством обработчика Clicked) на страницу, которая на самом деле больше не должна существовать (страница была обработана и отправлена клиенту). Но ссылка сохранит его, так что он не будет скопирован.
Как говорится, возможно , что вам просто нужно перемонтировать обработчик Clicked:
if (Session["lb2"] == null) {
/* ... */
} else {
lb2 = (LinkButton)Session["lb2"];
lb2.Click += Clicked;
}
Поскольку событие LinkButton.Click связано с другим экземпляром класса Page (тем, который использовался ранее), его запуск не будет иметь никакого эффекта visible (так как эта страница был уже оказан). Конечно, как я уже говорил выше, это просто сумасшествие, поэтому я не проверял это.
Если вы используете это, то вам также следует отказаться от подписки на Page_PreRender или сделать что-то еще, чтобы избежать проблемы GC.
И повторное создание элемента управления - это нормальный способ сделать это - и это приемлемый вариант для всех остальных, так что вы, возможно, задумываетесь над осложнениями в этом.