2012-06-02 3 views
2

У меня есть веб-форма asp.net с панелью обновления и некоторыми обработчиками событий кода для обработки частичных обратных передач. В таких случаях метод Sys.WebForms.PageRequestManager.getInstance.add_endRequest выполняется так же, как и при частичной визуализации страницы браузером.Response.Redirect В Ajax Code-Behind

Проблема заключается в том, что когда я вставляю Response.Redirect в код-в-одном в одном из этих событий, событие Sys.WebForms.PageRequestManager.getInstance.add_endRequest не выполняется. Из-за этого оживленная анимация продолжает отображаться после завершения выполнения страницы.

В частности, мой обработчик события с кодом переадресовывает пользователя в файл, это эффективно приводит к загрузке этого файла в браузере. Пока этот файл является файлом изображения, все это работает правильно, так как изображение отображается в том же окне браузера. Проблема возникает, когда файл представляет собой офисный файл ms, который браузер хочет открыть в офисе ms. Пользователь нажимает «открывать» или «сохранять» в диалоговом окне, и файл открывается в офисе ms или сохраняется в файловой системе, но страница остается в состоянии занятости, поскольку Sys.WebForms.PageRequestManager.getInstance.add_endRequest не выполняется.

ответ

1

Проблема заключается в том, что запросы являются частичными запросами страниц. Поскольку они загружают файлы, выгоды от них не получаются, делая их частичными. Вместо этого я создавал бы триггерные кнопки с поддержкой «кнопок», добавляя их как PostBackTriggers или программно используя метод RegisterPostBack ScriptManager.

+0

Спасибо. Я просто придумал это решение, и он отлично работает. – Atif

0

Хороший вопрос. Мое предложение вместо того, чтобы делать response.redirect на вашей странице itslef, отображать javascript, который перемещается к вашему файлу/изображению в новом окне. Так что ваш файл будет автоматически загружен в новом окне, а также будет запущен ваш Sys.WebForms.PageRequestManager.getInstance.add_endRequest.

Надеюсь, что это сработает.

0

Я нашел решение. Фактически нет необходимости в частичной обратной передаче в этом случае, потому что когда намерение перенаправляется на другую страницу, нет необходимости поддерживать состояние/данные/gui текущей страницы. Это не решение, если решение о перенаправлении не является окончательным, но условным.

Простой ответ заключается в том, чтобы сделать полную обратную передачу, вместо частичной обратной передачи. Для того, чтобы сделать постбэк, просто добавить элемент управления в списке запуска обратной передачи панели обновления или программно:

protected void gvDocumentListGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.DataItem != null) 
     tsm.RegisterPostBackControl(e.Row.FindControl("lbNameFileGrid")); 
} 

когда страница имеет toolkitscript менеджер под названием TSM, а GridView известный как gvDocumentListGrid и распределительным поле шаблона lbNameFileGrid.

Смежные вопросы