【问题标题】:queue asp.net UpdatePanel postbacks排队 asp.net UpdatePanel 回发
【发布时间】:2010-11-09 21:20:58
【问题描述】:

有没有办法使用 UpdatePanel 对回发进行排队?

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

viewstate 被禁用(所以不必担心)。

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

【问题讨论】:

    标签: asp.net updatepanel


    【解决方案1】:

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

    以下 ASP.NET/Javascript 的 sn-p 显示了如何拦截更新面板触发并禁用文本框。

    <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 将回发排队”),但最终效果是它迫使用户将他们的请求排队,所以不超过一个一次被处理。您也可以将其修改为更优雅的内容。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这就是我最终要做的。更新面板适用于批量操作(例如显示大部分 html 或一次提交大表单)。对服务器进行小而快的回发很糟糕。
        猜你喜欢
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 2016-08-06
        • 1970-01-01
        • 2021-10-23
        相关资源
        最近更新 更多