我的一个网页上有一个非常长submit()
类型的函数,完全在服务器上运行,我想向客户端显示一个进度条以显示进度。
我可以按照类似20%
的间隔更新它,只要我能向他们展示一些东西。
这甚至可能吗?也许用runat="server"
进行某种控制?我有点迷失在这里的想法。
答案 0 :(得分:4)
可能,但在基于Web的环境中比在基于桌面的环境中做起来要困难得多。
您需要做的是向服务器提交请求,让服务器启动异步任务,然后将响应发送回客户端。然后,客户端需要定期轮询服务器(可能/最好使用AJAX)进行更新。服务器将希望在长时间运行的任务体内设置一个会话值(或使用其他一些存储状态的方法),客户端的轮询方法可以访问该值。
这是令人讨厌,凌乱和低效的,所以如果有很多用户执行此操作,你不会想要这样做。
Here是Microsoft的示例实现。请注意,此示例使用UpdatePanel
个对象,ASP计时器等,这使得代码编写起来相当简单(并且它仍然不是那么漂亮),但这些组件相当“重”。使用明确的AJAX调用,创建Web方法而不是完全回发等等将会提高性能。正如我所说,即使在最好的情况下,这也是一场表演的噩梦。如果你有很多用户,或者这是一项非常多的操作,请不要这样做。如果仅仅是由一小部分管理员用户偶尔使用,那么这可能不是一个问题,并且 从用户的角度添加了很多。
答案 1 :(得分:0)
我会看看.net 4.5的异步并等待。
Using Asynchronous Methods in ASP.NET MVC 4 - (MVC示例我知道对不起)