有没有办法用UpdatePanel排队回发?
我有一个包含许多文本框的表单。每个文本框都包含在自己的UpdatePanel中,AutoPostBack设置为true。所以,当文本框发生变化时,就会发生回发。
viewstate已被禁用(因此无需担心)。
当用户更改一个文本框然后快速切换到下一个文本框,更改它以及再次选项卡时,会出现问题。一些回发正在迷失,我想避免这种情况。
答案 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解决方案可能会更好。