我对此很陌生,我的英语也很差。无论如何:
如果我的报告中有任何新记录,我正在尝试设置一个刷新我的页面的计时器。显然我的计时器工作正常,因为当我调试它时,它进入函数Timer1_Tick
,但它不刷新我的页面。
以下是代码:
System.Timers.Timer Timer1 = new System.Timers.Timer();
Timer1.Interval = 10000;
Timer1.Elapsed += Timer1_Tick;
Timer1.Enabled = true;
和
protected void Timer1_Tick(object sender, EventArgs e){
Response.Redirect("ReporteIncidencia.aspx"); //1st attempt
ScriptManager.RegisterStartupScript(Page, typeof(Page), "somekey", "RefreshPage()", true); //2nd attempt
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "RefreshPage()", true); //3rd attempt
}
也
<script type="text/javascript">
function RefreshPage()
{
window.location.reload()
}
</script>
编辑:
答案 0 :(得分:3)
我建议您使用Ajax来执行此操作。
但实现这一目标的一种简单方法是使用Asp.Net Timer和Update Panel组件。
在.aspx:
<asp:ScriptManager runat="server" id="ScriptManager1"/>
<asp:UpdatePanel runat="server" id="UpdatePanel1">
<ContentTemplate>
<asp:Timer runat="server" id="Timer1" Interval="10000" OnTick="Timer1_Tick">
</asp:Timer>
<asp:Label runat="server" Text="Page not refreshed yet." id="Label1">
</asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
在代码背后:
protected void Timer1_Tick(object sender, EventArgs e)
{
Label1.Text = "Panel refreshed at: " +
DateTime.Now.ToLongTimeString();
}
使用更新面板需要asp:ScriptManager组件。更多信息here。
答案 1 :(得分:0)
这不起作用的原因是,一旦响应从服务器发送到客户端,服务器就不能再修改响应,因此它无法注册启动脚本。您必须记住ASP.NET page lifecycle以及服务器端和客户端之间的区别。
相反,您可以在JavaScript中实现在客户端运行的计时器,如How to reload page every 5 second中所述?
然而,这并不理想,因为现在您的页面将再次请求页面的整个HTML。这是一个很大的开销。相反,您应该只刷新所需的数据。我在How to implement real time data for a web page中描述了各种技术,讨论了UpdatePanel,AJAX轮询和使用SignalR。注意我特别推荐使用UpdatePanel。他们很棘手,效率低下。
答案 2 :(得分:0)
asp.net服务页面后,它停止与服务器的通信。页面加载完成后,您无法将通知从代码推送到客户端。 *
如果您只想在一段时间后重定向用户,请检查客户端上的时间,例如:
C#:
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "RefreshPage()", true);
的JavaScript
<script type="text/javascript">
function RefreshPage()
{
setTimeout(function(){
window.location.reload();
}, 10000);
}
</script>
否则,您可以不时地从客户端到服务器创建请求。