【问题标题】:How can i refresh a asp page from code behind? C# [duplicate]如何从后面的代码中刷新一个 asp 页面? C# [重复]
【发布时间】:2015-04-06 19:30:49
【问题描述】:

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

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

【问题讨论】:

  • 您是否考虑过在您的应用程序中使用 SignalR?
  • @rajeemcariazo 我不熟悉 SignalR,我看看谢谢
  • @Izzy 我已经尝试过该帖子,但没有任何效果,谢谢
  • “没有用。”
  • @JasonMArcher 嗨,*Izzy 说我应该看看这篇文章 (stackoverflow.com/questions/2240287/…),但在我在这里发布我的问题之前,我已经尝试了该帖子的答案。这就是为什么我说:“(它)没有任何作用”。我将修改我的问题并发布一些附加代码。谢谢回复=)

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


【解决方案1】:

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

【讨论】:

  • 我很喜欢你的回答!我可以在 initialize() 上使用此代码每隔一段时间重新加载我的页面:ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',20000 );“, 真的);但是,如果 =( 后面的代码发生问题,我需要重新加载页面。我在我公司的框架下工作,所以它给了我构建 datagridview 的方法,无论如何我会看看你的帖子。再次感谢。跨度>
  • @Maverick.pe 响应发送后,后面的代码在页面中不再起作用,因此无法调用客户端代码。您需要使用我讨论过的一种实时数据技术重新考虑您的策略。
  • 是的 .. 我正在尝试使用您讨论的其他实时数据技术。我尝试了 UpdatePanel 和 Ajax 轮询,但它不起作用。我会试试 SignalR =) 谢谢。
  • @Maverick.pe 如果您正确配置它们,我描述的所有技术都会起作用。更重要的是选择适合您情况的最佳技术,然后正确实施。
【解决方案2】:

我建议您使用 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

【讨论】:

  • 我试过了,但它不起作用。注意:我在我公司的框架和母版页下工作。我在一个新的 .aspx 页面上尝试了这个示例,它可以工作 ='(我应该从我的 .aspx 发布整个代码吗?感谢您的回答。
  • “不起作用”是什么意思?至少引发 Timer_Tick 事件?
  • 是的..它甚至没有提高。
  • 在这种情况下,您应该问另一个问题。我提供的代码回答了这个问题。
【解决方案3】:

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,但如果你只是想用它来刷新页面,它们并不是最好的解决方案

【讨论】:

  • 但这会不时刷新我的页面,如果后面的代码发生问题,我只需要重新加载 =( 谢谢。如果我在 initialize() 上使用此代码:ScriptManager.RegisterStartupScript(this , GetType(), "refresh", "window.setTimeout('window.location.reload(true);',20000);", true); 它的作品,但如果我试图在 Timer1_Tick 上使用它 .. 它没有'不行。叹气*
  • @Maverick.pe 那么你必须向服务器发出请求,就像 Arthur Castro 的回答一样。页面完成加载后,你不能向客户端发送任何内容。除非你使用 SignalR(或者它是底层技术,如 websockets、SSE 等),客户端和服务器之间的连接是关闭的。
  • 我会搜索 SignalR,我从未听说过。谢谢=)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多