ASP.NET反馈在长时间提交



这可能是一件非常简单的事情。基本上,用户单击一个按钮,一个可能长时间运行的任务就会发生。我想做一些事情,比如切换按钮的启用状态,显示旋转器等。在VB。我只要做Application.DoEvents(),更新就会发生,代码可以继续。如何在ASP.NET中做到这一点?

在ASP中有几种方法可以做到这一点。这取决于你的具体需求。启动该进程相当容易,但是从客户端监视它的完成将需要在服务器和客户端进行更多的工作。

解决方案的基本大纲是:

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

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

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

我们使用以下通用方法从web客户端启动报告,这可以长时间运行:

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

报告页面的用户界面基本上包含一个动画GIF,以便用户知道正在发生什么。

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

一旦创建了数据库条目,页面就会触发BackgroundWorker来启动该操作,然后将页面返回给用户。

当页面显示时,javascript启动一个窗口。超时循环,定期向web服务器发出ajax请求,然后web服务器使用先前创建的唯一标识符检查数据库中的报告状态。

当后台工作者完成报告时,无论成功还是失败,它都会用状态、报告位置或错误消息更新数据库表并终止。

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

这样做的问题可能是,一旦页面发布,您就无法更新页面的其他部分。你可以使用多个asp:updatepanel,并与其他更新面板通信,导致面板中的状态发生变化。看看这个链接:

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

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

最新更新