После отключения кнопки «Отправить» с помощью JS, повторно включите после загрузки файла - PullRequest
1 голос
/ 11 ноября 2010

Я работаю над приложением ASP.NET.В настоящее время, когда пользователь нажимает «Сохранить» на элементе, мы отключаем кнопку «Сохранить», меняем его текст на «Сохранение ...» и так далее.Это работает нормально, потому что кнопка вызывает обратную передачу, что приводит к загрузке новой страницы, на которой кнопка Сохранить больше не отключена.

Теперь мы хотим применить это к другим действиям: Опубликовать (мало чем отличаетсяиз Сохранить), Импорт (опять же, очень похоже на Сохранить, но на основе данных, загруженных пользователем на предыдущем шаге), Экспорт (загрузка файла XML пользователю) и т. д.

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

Код на стороне сервера соответствует строчке

Response.Clear();
Response.BufferOutput = true;
Response.ContentType = "text/xml";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + whatever);
[push file contents into Response.OutputStream]
Response.End();

[Не знаю, хороший это код или нет - он не мой - но он выполняет свою работу:)]

В общем, я хотел бы знать либо:

  • способ заставить сервер отправить новую страницу обратно в ответ, а также XML, таким образом повторно включить кнопку таким же образом, как это делают другие страницы, или
  • способ получитьбраузер / JS для повторного включения кнопки после отправки файла.

Ответы [ 3 ]

1 голос
/ 09 декабря 2010

Похоже, это должно сделать это: по сути, установите cookie с ответом файла, и браузер ожидает этот cookie, чтобы разблокировать страницу.

0 голосов
/ 27 января 2018

Есть грязный хак. Вы можете использовать метод setTimeOut для включения и изменения заголовка кнопки / изображения.

Таким образом, вы можете написать код на стороне сервера, похожий на

btn.Attributes.Add ("onclick", "this.disabled = 'true'; this.value = 'Processing ...'; _ doPostback (this, null); setTimeout (function () {включить логику кнопки. ... установить текст / изображение кнопки},); ");

Событие загрузки приложения на стороне сервера не будет синхронизировано идеально, но вы можете установить тайм-аут на 2-5 секунд в зависимости от конфигурации вашего сервера.

Спасибо!

0 голосов
/ 11 ноября 2010

Возможно, проблема в том, что вы вообще не загружаете новую страницу.

Поскольку размещение содержимого является вложением, браузер не будет перезагружать страницу, а только сохраняет возврат с сервера на диск.

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

...