我正在制作一个网络应用程序。我在更新面板上遇到了一个奇怪的错误。
好的,所以说你有两个更新面板,每个更新面板都有一个文本框。这两个文本框都是自动回发,更新面板有条件地更新。
好吧,从我观察的行为来看,似乎服务器在处理请求时并不比用户快,那么在客户端它会被忽略。 比如说你在其中一个文本框中键入了一些东西,然后快速标记到下一个文本框并键入内容并标记出来。这应该导致2个帖子。
那么,如果在服务器上处理1个回发而又发生另一个回复怎么办?这个帖子会在服务器端或客户端被丢弃吗?
我在这种情况下观察到的主要问题是,当第一次发布回发时,更新面板有一个Update()。好吧,当第二个帖子发生中断第一个时,它也会在更新面板(另一个)上执行更新。用户看到的是,如果他们非常快速地通过它(或者服务器处于高负载或其他状态),那么第二个更新面板会更新但不会更新。
tl; dr:当回发中断其他帖子后,任何假设在第一篇文章中更新的更新面板都不会更新(虽然第二回发的更新)
如何解决此问题或解决此问题?我无法更新屏幕上的所有更新面板,因为用户当前所使用的控件会丢失一大堆焦点其他问题。
答案 0 :(得分:3)
UpdatePanels
拦截回发并使用XMLHTTPRequest对象向服务器发出请求(即他们使用AJAX)。
如果第二个XMLHTTPRequest在制作第二个XMLHTTPRequest时仍在进行中,则它将取消第一个XMLHTTPRequest。据我所知,这是标准行为。
您可能希望在点击按钮时同时更新UpdatePanels
,而不是将更新附加到每个文本框上的事件(听起来您已将它们附加到blur
事件) 。这样,您可以确保不会发出大量请求,并且可能在请求正在进行时禁用该按钮,以防止新请求取消正在进行的请求。
修改强>
通过检查PageRequestManager
的{{1}}属性,您可以阻止在一个请求正在进行时从客户端发出另一个请求。类似于以下内容
isInAsyncPostBack
如果回发被中断,从服务器端知道并不是一种简单的方法。
答案 1 :(得分:0)
我无法专门回答您的问题,因为我不知道该页面如何管理UpdatePanel及其请求/响应。但是,如果用Fiddler跟踪调用,你可能很容易知道发生了什么。您可以看到请求何时触发,您可以看到响应以及是否发送了HTTP错误代码或抛出异常等等:
答案 2 :(得分:0)
使用UpdateProgress控件:http://www.asp.net/ajax/documentation/live/overview/UpdateProgressOverview.aspx
此外,UpdatePanels对于这种事情来说太过分了。看看使用页面方法(谷歌ASP.NET页面方法)
编辑:为了进一步说明这对您有用,请修改UpdateProgress控件中ProgressTemplate的内容以模式方式显示,以便用户在请求完成之前无法执行任何操作。