有没有办法用UpdatePanel排队回发?
我有一个包含许多文本框的表单 . 每个文本框都包含在自己的UpdatePanel中,AutoPostBack设置为true . 因此,当文本框更改时,会发生回发 .
viewstate已禁用(因此不必担心) .
当用户更改一个文本框,然后快速切换到下一个文本框,更改它和标签时,会出现问题 . 一些回发正在迷失,我想避免这种情况 .
更新面板即将触发时,您可以获得客户端“挂钩” . 这意味着,在更新面板刷新时,您至少可以暂时禁用文本框(或者具有某种“请稍候”通知) .
以下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排队回发”),但最终的结果是它迫使用户排队他们的请求,所以不超过一个正在处理一时间您可以将其修改为更优雅的东西 .
没有内置的方法来控制它 . jQuery有一些非常漂亮的东西,使AJAX调用非常简单 . 您可能会尝试以这种方式处理自己的回发 .
我知道,这不是你问题的答案 . 但我建议重新考虑,如果你真的需要用更新面板包装每个文本框 . 更新面板很有用,但您需要小心使用它们 . 在您的场景中,简单的jQuery Ajax解决方案可能会更好 .
3 回答
更新面板即将触发时,您可以获得客户端“挂钩” . 这意味着,在更新面板刷新时,您至少可以暂时禁用文本框(或者具有某种“请稍候”通知) .
以下ASP.NET / JavaScript代码片段显示了如何拦截更新面板触发和禁用文本框 .
我知道这不是你最初要求的(“有没有办法用UpdatePanel排队回发”),但最终的结果是它迫使用户排队他们的请求,所以不超过一个正在处理一时间您可以将其修改为更优雅的东西 .
没有内置的方法来控制它 . jQuery有一些非常漂亮的东西,使AJAX调用非常简单 . 您可能会尝试以这种方式处理自己的回发 .
我知道,这不是你问题的答案 . 但我建议重新考虑,如果你真的需要用更新面板包装每个文本框 . 更新面板很有用,但您需要小心使用它们 . 在您的场景中,简单的jQuery Ajax解决方案可能会更好 .