在Repeater中更新面板 - 为什么不能同时进行多次回调?

时间:2009-05-14 12:59:35

标签: asp.net asp.net-ajax updatepanel

我在转发器中有一个更新面板

(编辑:我删除了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>

这里的想法是单击LinkBut​​ton并回调并为该数据项执行服务器端操作。这适用于一件商品。但是,如果我单击每个项目的按钮而不等待先前的更新面板完成回叫,则它似乎取消之前的回调。

UpdatePanels可以不同时执行回叫吗?无论如何我可以做到这一点,所以你不需要等到点击下一个按钮之前?

2 个答案:

答案 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 :-) 我在考虑这个问题,为什么微软的人没有实现这样的事情: - )