【发布时间】:2010-12-24 09:49:04
【问题描述】:
这是我为演示我的问题而构建的示例应用程序。一个单独的 aspx 页面,上面有以下内容:
<form id="form1" runat="server">
<asp:ScriptManager runat="server" />
<asp:Button runat="server" ID="btnGo" Text="Go" OnClick="btnGo_Click" />
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:TextBox runat="server" ID="txtVal1" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
然后,在后面的代码中,我们有以下内容:
protected void btnGo_Click(object sender, EventArgs e)
{
Thread.Sleep(5000);
Debug.WriteLine(string.Format("{0}: {1}", DateTime.Now.ToString("HH:MM:ss.fffffff"), txtVal1.Text));
txtVal1.Text = "";
}
如果您运行此程序并多次单击“开始”按钮,您将在“输出”窗口中看到多个调试语句,显示多个请求已被处理。这似乎与更新面板的记录行为相矛盾(即,如果您在处理面板时发出请求,则第一个请求将被终止并处理当前请求)。
无论如何,重点是我想修复它。显而易见的选择是在第一次按下后使用 Javascript 禁用按钮,但这让我觉得难以维护,我们可能在很多屏幕上遇到同样的问题,如果有人重命名按钮,它很容易被破坏。
你有什么建议吗?也许我可以在 Global.asax 的 BeginRequest 中做些什么来检测重复请求? UpdatePanel 上是否有一些设置或功能可以阻止它这样做,或者 AjaxControlToolkit 中的某些东西会阻止它吗?
【问题讨论】:
标签: javascript asp.net ajax asp.net-ajax updatepanel