使用Ajax从服务器向客户端发送进度消息

时间:2009-07-04 16:09:42

标签: c# ajax asp.net-ajax updatepanel

我正在使用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 个答案:

答案 0 :(得分:2)

这并不容易......您无法主动从服务器向客户端发送内容。只有客户端才能发出查询状态的请求。

现在您已经有一个请求正在运行(单击该按钮)。但是只有在保存了100个文件后才能完成。理论上,您可以通过写入响应然后将其刷新以确保传输数据来发送一小部分数据。我从来没有尝试过,我也不知道任何可以处理这种响应的Ajax客户端。

我要做的是:将当前状态保存在ASP.NET会话对象中,然后在计时器上发出另一个Ajax请求,每隔X秒查询一次状态。请注意,当您执行此操作时,按钮上的请求仍在运行(可能会导致问题)。您可能希望触发异步操作。