我如何从代码隐藏中刷新 asp 页面? C#

How can i refresh a asp page from code behind? C#

我是新手,我的英语也很差。不管怎样:

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

这不起作用的原因是一旦响应从服务器发送到客户端,服务器就不能再修改响应,因此它不能注册启动脚本。您必须牢记 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。他们狡猾且效率低下。

我推荐你使用Ajax来执行这个操作。

但一个简单的实现方法是使用 Asp.Net 计时器和更新面板组件。

在 .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.

在 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,但如果您只想使用它来刷新页面,它们不是最佳解决方案