长时间提交期间的ASP.NET反馈

时间:2011-12-23 17:16:05

标签: asp.net vb.net .net-2.0

这可能是一件非常简单的事情。基本上,用户单击按钮并且可能发生长时间运行的任务。我想做一些事情,比如切换按钮的启用状态,显示微调器等等。在VB.NET Winforms中我只做Application.DoEvents()并且更新会发生并且代码可以继续。我怎么能在ASP.NET中这样做? (最好是服务器端或最小的javascript)

2 个答案:

答案 0 :(得分:1)

这个问题可能是一旦页面发布,您就无法更新页面的其他部分。 您可以使用多个asp:updatepanel并与其他更新面板进行通信,从而导致状态在面板中更改。 看看这个链接:

http://www.ajaxtutorials.com/ajax-tutorials/tutorials-using-multiple-updatepanels-in-net-3-5-and-vb/

它会告诉你如何做到这一点。

答案 1 :(得分:1)

根据您的要求,ASP.Net中有几种方法可以解决这个问题。启动流程相当容易,但是从客户端监控它以完成将需要在服务器和客户端中进行更多的工作。

解决方案的基本概要是:

1)在启动操作的客户端上执行一些操作。例如,您可以在按钮单击时发回整个页面,发起ajax请求,或者根据您需要从页面中获取的信息进行部分页面回发。

2)在服务器端,使用BackgroundWorker启动任务,在工作流队列中创建条目,或将请求存储在由负责执行操作的服务监视的数据库表中

3)回到客户端,使用javascript启动一个window.timeout循环,当它超时时,向Web服务器发出ajax请求以检查完成情况。使用这样的超时循环将确保UI保持响应,并且正在显示的任何动画都将正确显示。如何检查完成将取决于服务器端实现的设计方式,但几乎肯定需要数据库。

我们使用以下一般方法从Web客户端启动报告,该报告可以长时间运行:

当用户启动报告时,使用javascript打开客户端上报告生成页面的新窗口,传递足够的参数以启动它。打开一个单独的窗口允许用户继续工作,但仍然看到发生了某些事情。

报告页面的用户界面基本上包含动画GIF,以便用户知道某些事情正在发生。

当报表页面最初加载到服务器上时,它会生成一个唯一的ID来监控报表的状态,并将其嵌入到javascript中以用于监控状态。然后,它将此唯一标识符存储在包含唯一ID和状态列的数据库表中,并将状态初始化为所请求的状态。

完成数据库条目后,页面将触发BackgroundWorker以启动操作,然后将页面返回给用户。

当页面显示时,javascript启动一个window.timeout循环,定期激活对Web服务器的ajax请求,然后Web服务器使用之前创建的唯一标识符检查数据库的状态。

当backgroundworker成功或失败完成报告时,它会使用状态,报告位置或错误消息更新数据库表并终止。

当javascript循环发现报告生成已完成时,它会向用户显示错误消息或报告。

希望这能为您解决问题提供一些想法。