队列asp.net UpdatePanel回发

时间:2009-07-10 23:14:21

标签: asp.net updatepanel

有没有办法用UpdatePanel排队回发?

我有一个包含许多文本框的表单。每个文本框都包含在自己的UpdatePanel中,AutoPostBack设置为true。所以,当文本框发生变化时,就会发生回发。

viewstate已被禁用(因此无需担心)。

当用户更改一个文本框然后快速切换到下一个文本框,更改它以及再次选项卡时,会出现问题。一些回发正在迷失,我想避免这种情况。

3 个答案:

答案 0 :(得分:4)

更新面板即将启动时,您可以获得客户端“挂钩”。这意味着,在更新面板刷新时,您至少可以暂时禁用文本框(或者有某种“请稍候”通知)。

ASP.NET / JavaScript的以下片段显示了如何拦截更新面板触发和禁用文本框。

<form id="form1" runat="server">
    <asp:ScriptManager runat="server"></asp:ScriptManager>
    <div>
        <asp:UpdatePanel runat="server" ID="updatePane1">
            <ContentTemplate>
                <asp:TextBox runat="server" ID="textBox1" AutoPostBack="true" OnTextChanged="textBox_TextChanged" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
        <asp:UpdatePanel runat="server" ID="updatePane2">
            <ContentTemplate>
                <asp:TextBox runat="server" ID="textBox2" AutoPostBack="true" OnTextChanged="textBox_TextChanged" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <br />
    </div>
    </form>
    <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequest);
        function InitializeRequest(sender, args) {
            if (args._postBackElement.id == 'textBox1' || args._postBackElement.id == 'textBox2') {
                document.getElementById('textBox1').disabled = true;
                document.getElementById('textBox2').disabled = true; 
            }
        }
    </script>

我知道这不是你最初要求的(“有没有办法用UpdatePanel排队回发”),但实际效果是强制用户排队他们的请求所以不超过一个是正在处理。您可以将其修改为更优雅的东西。

答案 1 :(得分:1)

没有内置的方法可以控制它。 jQuery有一些非常漂亮的东西,使AJAX调用非常简单。您可以尝试以这种方式处理自己的回发。

答案 2 :(得分:1)

我知道,这不是你问题的答案。但我建议重新考虑,如果你真的需要用更新面板包装每个文本框。更新面板很有用,但您需要小心使用它们。在您的场景中,简单的jQuery Ajax解决方案可能会更好。