首页 文章

队列asp.net UpdatePanel回发

提问于
浏览
2

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

我有一个包含许多文本框的表单 . 每个文本框都包含在自己的UpdatePanel中,AutoPostBack设置为true . 因此,当文本框更改时,会发生回发 .

viewstate已禁用(因此不必担心) .

当用户更改一个文本框,然后快速切换到下一个文本框,更改它和标签时,会出现问题 . 一些回发正在迷失,我想避免这种情况 .

3 回答

  • 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>
            
    <asp:UpdatePanel runat="server" ID="updatePane2"> <ContentTemplate> <asp:TextBox runat="server" ID="textBox2" AutoPostBack="true" OnTextChanged="textBox_TextChanged" /> </ContentTemplate> </asp:UpdatePanel>
    </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

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

  • 1

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

相关问题