我在转发器中有一个更新面板
(编辑:我删除了Runat和Id属性以使帖子看起来更清晰)
<asp:Repeater>
<ItemTemplate>
<asp:UpdatePanel UpdateMode="Conditional">
<ContentTemplate>
<asp:LinkButton onclick="btnCallback_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress DisplayAfter="0">
<ProgressTemplate>
<img src="spinningProgress.gif" />
</ProgressTemplate>
</asp:UpdateProgress>
</ItemTemplate>
</asp:Repeater>
这里的想法是单击LinkButton并回调并为该数据项执行服务器端操作。这适用于一件商品。但是,如果我单击每个项目的按钮而不等待先前的更新面板完成回叫,则它似乎取消之前的回调。
UpdatePanels可以不同时执行回叫吗?无论如何我可以做到这一点,所以你不需要等到点击下一个按钮之前?
答案 0 :(得分:2)
通过UpdatePanel执行的每个AJAX请求都会取消之前的任何一个(如果之前仍在运行)。这就是它的构建方式。 UpdatePanel AJAX请求传递ViewState的部分内容以及请求。不可能(至少非常难)协调并发ajax调用带来的多个任意视图状态。我听说这是MS选择以这种方式构建它的主要原因。
编辑:使用jQuery并享受乐趣: - )
答案 1 :(得分:0)
之前我遇到过同样的问题。但我发现制作一些技巧可以让你在不同的微软更新面板中实现多个ajax calback。
function ProcessCallBack(uniqID)
{
var prm = Sys.WebForms.PageRequestManager.getInstance();
//checking if there is somewhere perforimg of callback
if (prm.get_isInAsyncPostBack())
{
setTimeout("ProcessCallBack()", 1000); //here we move execution of callback
//for 1 sec forward
}
else
{
__doPostBack(uniqID,'');
}
return false;
}
因此,您必须在客户端点击时将该功能的调用添加到您的按钮或控件。 uniqID是服务器控件的唯一标识符,您可以在服务器端获取它。 所以尽情享受,并记住一切皆有可能,但对于一些人来说需要很多时间todo :-) 我在考虑这个问题,为什么微软的人没有实现这样的事情: - )