在我的表格中有一个“提交按钮”和另一个计时器...提交按钮提交一个请求,可能需要几分钟才能服务...同时计时器将以短间隔(比如5秒)轮询并保持用户更新..但问题是,一旦点击提交按钮,计时器就会停止轮询。我正在附上应用程序的工作示例代码。有人知道为什么会发生这种情况。谢谢提前。
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Submit_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" Interval="700" runat="server" OnTick="UpdateTimer_Tick">
</asp:Timer>
</form>
</body>
背后的代码
protected void UpdateTimer_Tick(object sender, EventArgs e)
{
Debug.Write("Timer");
Label1.Text = DateTime.Now.ToString();
}
protected void Submit_Click(object sender, EventArgs e)
{
Debug.Write("Submit Start ");
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(100);
}
Debug.Write("Submit End ");
}
答案 0 :(得分:3)
我认为计时器在回发时停止(按钮单击),并且只有在该回发返回时才会再次启动。对此的一个解决方案是使用PageMethods而不是计时器,但您只能将静态函数设为PageMethod。对于示例,它将像这样工作:
[WebMethod()] public static string GetTime(){
Return DateTime.Now.ToString();
}
html和javascript(jquery):
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<div>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Submit_Click" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<script type="text/javascript">
function OnSuccess(result, ctrl) { $('#<%=Label1.ClientID %>').html(result); }
function OnError() { alert("error!"); }
$(document).ready(function() {
setInterval(function() { PageMethods.GetTime(OnSuccess, OnError); }, 700)
});
</script>
</form>
</body>
使用webmethods时不要忘记设置EnablePageMethods =“true”!
在测试时我注意到响应比SetTimeout触发新的ajax调用慢,所以页面快速建立运行连接,这可能是因为我的开发服务器有点慢。要解决这个问题,你不应该频繁更新,每5秒就要做一次。
我想asp.net计时器已经阻止了这种行为:它在另一个ajax调用完成时停止。此行为会导致您遇到的问题,按钮回发会阻止计时器更新。