Как я могу остановить постбэк от обновления страницы на клиенте - PullRequest
7 голосов
/ 05 января 2012

Когда я запускаю обратную передачу с помощью __doPostBack, файл создается и возвращается пользователю для загрузки в HttpContext.Current.Response.

Поскольку я изменяю Response, страница, содержащая значения javascript, не изменяется

Но когда у меня нет файла для вывода, страница обновляется (из-за обратной передачи), и модификация javascript на странице теряется.

Как я могу «остановить» постбэк от продолжения и сохранения моей текущей страницы? Я не могу использовать асинхронную обратную передачу, потому что мне нужна обратная передача, чтобы позволить пользователю загрузить файл.

РЕДАКТИРОВАТЬ: больше информации после некоторых вопросов в комментариях:

  • Файл запрашивается в запросе веб-службы. Веб-сервис нуждается выполнить тяжелый запрос, чтобы определить, будет ли создан файл. я предпочитаю, чтобы это происходило только один раз.
  • Пользователь может перетаскивать некоторые фильтры, которые будут использоваться в файле запрос. Если файл недоступен, пользователь должен иметь возможность изменить его фильтры, поэтому страница не должна быть изменена.

1 Ответ

7 голосов
/ 07 января 2012

Из стандартов W3 и RFC 2616:

10.2.5 204 Нет содержимого Сервер выполнил запрос, но не должен возвращать тело объекта и может захотеть вернуть обновленный метаинформации. Ответ МОЖЕТ включать новый или обновленный метаинформация в виде заголовков сущностей, которые при наличии ДОЛЖНЫ быть связанным с запрошенным вариантом.
Если клиент является пользовательским агентом, он НЕ ДОЛЖЕН изменять представление своего документа по сравнению с тем, что вызвало отправку запроса. Этот ответ в первую очередь предназначен для обеспечения возможности ввода действий без вызывая изменение в активном представлении документа агента пользователя, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документу в настоящее время в активном представлении агента пользователя. Ответ 204 НЕ ДОЛЖЕН включает тело сообщения и, таким образом, всегда завершается первым пустая строка после полей заголовка.

Обратите внимание на жирную линию здесь. Я не пробовал это сам; однако установка статуса HTTP на 204 и отправка обратно пустого документа, а не попытка полностью прекратить обратную передачу, безусловно, стоит попробовать.

Удачи, надеюсь, это поможет.

РЕДАКТИРОВАТЬ: это код, который делает трюк:
System.Web.HttpContext.Current.Response.StatusCode = 204;

...