Отправка сообщения о ходе выполнения с сервера на клиент с использованием Ajax

Я использую UpdatePanel, чтобы вызвать событие нажатия кнопки, которое сохраняет более 100 файлов в указанной папке. Я хочу, чтобы сервер обновил клиент о статусе и количестве сохраняемых файлов.

protected void btnSave_Click(...){    
  var filesToSave = GetFilesToSave();
  foreach(var fileToSave in filesToSave){
    SaveProcessedFile(fileToSave);//It takes almost 30seconds to save a file
    UpdateStatusOnClient(fileToSave); //Don;t know what should be done here???????????
  }
}

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

Благодарю.

1 ответ

Решение

Это не так просто... Вы не можете активно отправлять что-то с сервера клиенту. Только клиент может сделать запрос для запроса статуса.

Теперь у вас уже запущен запрос (нажмите на кнопку). Но это закончится только после сохранения 100 файлов. Теоретически, вы можете отправить небольшой кусочек данных, записав ответ, а затем сбросив его, чтобы убедиться, что данные передаются. Я никогда не пробовал этого, и я не знаю ни одного Ajax-клиента, который мог бы справиться с таким ответом.

Я хотел бы сделать следующее: сохранить текущее состояние в объекте сеанса ASP.NET, а затем сделать еще один Ajax-запрос по таймеру для запроса состояния каждые X секунд. Имейте в виду, что запрос на кнопку все еще выполняется, пока вы делаете это (это может вызвать проблемы). Вы можете вместо этого инициировать асинхронное действие.

Другие вопросы по тегам