Как мне обработать обратную передачу в пользовательском контроле от нажатия кнопки на MasterPage - PullRequest
4 голосов
/ 03 ноября 2011

У меня есть пользовательский контроль внутри веб-формы с MasterPage. MasterPage имеет кнопку выхода из системы:

protected void lbtnLogout_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        Session.Clear();
        Response.Redirect("~/Account/WebLogin.aspx");
    }

Когда я нажимаю кнопку выхода из системы, usercontrol перезагружается перед вызовом описанного выше обработчика событий, тем самым совершая ненужную поездку в базу данных.

Как мне справиться с обратной передачей? Есть ли способ игнорировать это в пользовательском контроле?

Заранее спасибо.

Обновление: я должен был упомянуть ранее. Я использую фреймворк реализации "WebFormsMvp". Веб-форма с MasterPage имеет несколько пользовательских элементов управления, которые являются представлениями, которые связаны с их соответствующими докладчиками во время выполнения. Я не обрабатываю Page_Load ни в одном из пользовательских элементов управления, поскольку данные привязываются к каждому пользовательскому элементу управления инфраструктурой до события Page_Load.

Я обновлю тег для этого вопроса соответственно.

Ответы [ 4 ]

3 голосов
/ 04 ноября 2011

Один из вариантов - добавить совершенно новую страницу aspx / ashx для выхода.У этой страницы есть собственный докладчик (или пользовательский элемент управления, у которого есть собственный докладчик), который содержит логику выхода из системы (и перенаправляет обратно на страницу входа).

Затем измените вашу ссылку выхода на обычную aтег , указывающий на новую страницу (вместо использования обратной передачи в том виде, в каком вы сейчас находитесь).

Этот подход в основном такой же, как и второй пост (первый ответ) в http://forums.asp.net/t/1369480.aspx/1, адаптированк тому, что http://webformsmvp.com/ работает.

0 голосов
/ 03 ноября 2011

Использование Page.IsPostBack in pageload.

0 голосов
/ 03 ноября 2011

huMpty duMpty все еще должен быть прав в своем ответе.

Вы также можете проверить IsPostBack (я думаю, base.IsPostBack) в ваших докладчиках, прежде чем идти в базу данных.

OfКонечно, это зависит от ваших докладчиков, которым всегда нужно получать новые данные из БД, тогда вам может понадобиться посмотреть некоторые параметры, чтобы пропустить вызов БД ..?

0 голосов
/ 03 ноября 2011

Нет, вы не можете остановить (вы можете переопределить, но это выходит за рамки) нормальный Load запуск до вашего события Button. ASP.NET должен перезагрузить элементы управления, чтобы знать, что что-то изменилось, чтобы иметь возможность запускать события. Чтобы лучше понять, как работает ASP.NET, взгляните на эту статью:

Обзор жизненного цикла страницы ASP.NET

...