2011-12-23 46 views
0

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

回答

1

有几种方法可以在ASP.Net中实现,具体取决于您的要求。启动流程相当简单,但要从客户端完成监控,需要在服务器和客户端进行更多的工作。

解决方案的基本轮廓是:

1)启动一个动作在客户端上执行一些动作。例如,您可以将整个页面重新发布到单击按钮上,发起ajax请求,或者进行部分页面回发,具体取决于您需要从页面获取多少信息。

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

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

我们用下面的一般方法用于启动从web客户端,它可以是长期运行报告:

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

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

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

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

当页面显示时,javascript会启动一个window.timeout循环,该循环周期性地向Web服务器发出ajax请求,然后使用先前创建的唯一标识符检查数据库中的报告状态。

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

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

希望这可以为您解决问题提供一些建议。

1

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

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

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