Кошмар управления пользователями ASP.net

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

Каждый раз, когда страница загружается, к ней добавляется элемент управления, я использую сеанс для воссоздания его состояния, где это применимо. Когда я ухожу со страницы, я очищаю сеанс через javascript window.onunload с помощью веб-метода. Window.onunload доставлял мне проблемы, выполняя ПОСЛЕ нового события page_load, что создавало ситуацию, с которой очень трудно справиться.

Любые советы о том, как исправить это без полного отказа от пользовательских элементов управления? Каков другой способ повторного использования кода без вырывания волос? Спасибо!


person sarsnake    schedule 02.03.2010    source источник
comment
Можете ли вы опубликовать код о том, как вы очищаете сеанс и когда?   -  person hunter    schedule 02.03.2010
comment
Я очищаю сеанс внутри window.onunload, используя веб-метод.   -  person sarsnake    schedule 02.03.2010


Ответы (2)


Это обычная головная боль. Исходя из всей литературы, которую я видел, а также из моего личного опыта, просто нецелесообразно зависеть от сеанса очистки через javascript или любые другие средства. Концепция состояния сеанса накладывается на HTTP; он никогда не предназначался для учета сеанса.

Похоже, вы доводите состояние сеанса до предела. Рассматривали ли вы ViewState или базу данных для управления данными с отслеживанием состояния? Почему так важно очищать данные сеанса каждый раз, когда пользователь уходит?

person Dave Swersky    schedule 02.03.2010
comment
Если пользователь нажимает на меню верхнего уровня, он должен получить состояние управления по умолчанию, а не ранее запомненное состояние.... следовательно, в некоторых местах я хотел бы очистить сеанс. - person sarsnake; 02.03.2010
comment
ViewState — лучшее решение. - person Steven A. Lowe; 02.03.2010
comment
ViewState — это словарь, который может содержать сериализуемые объекты и сохраняется при обратных передачах в строке с кодировкой Base64 в скрытом поле формы. Это может быть полезно для управления состоянием обратных передач, но может увеличить объем данных, передаваемых по сети. Использование: ViewState[MyData] = myObj; - person Dave Swersky; 02.03.2010
comment
^ На самом деле я не могу передавать слишком много данных по сети, но в этом конкретном случае то же самое и с объектом Session - он также хранится на сервере. - person sarsnake; 02.03.2010

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

person sarsnake    schedule 02.03.2010