如何从代码后面刷新asp页面? C#

时间:2015-02-06 15:45:54

标签: c# asp.net timer reload code-behind

我对此很陌生,我的英语也很差。无论如何:

如果我的报告中有任何新记录,我正在尝试设置一个刷新我的页面的计时器。显然我的计时器工作正常,因为当我调试它时,它进入函数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>

编辑:

  1. 我正在使用Framework .NET 3.5
  2. 我尝试使用此post,但它不起作用。
  3. 谢谢你的回答。

3 个答案:

答案 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>

否则,您可以不时地从客户端到服务器创建请求。

  • 例如,有websockets和SSE,但如果您只是想用它来刷新页面,它们就不是最好的解决方案