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

问题描述:

我对此有点新,而我的英语也很差。无论如何:如何从后面的代码刷新一个asp页面? 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. 我使用.NET框架3.5
  2. 我试过这个post但它不起作用。
  3. 感谢您的回答。
+0

有你在你的应用程序中使用SignalR考虑? – rajeemcariazo 2015-02-06 15:51:30

+1

@rajeemcariazo我不熟悉SignalR,生病看看谢谢 – 2015-02-06 16:02:13

+0

@Izzy我已经试过这个帖子,但没有任何作品,谢谢 – 2015-02-06 16:02:39

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

+0

我试过了,但它不起作用。 注:我工作在我公司的框架和主页。我在一个新的.aspx页面上尝试了这个例子,它工作='(我应该从我的.aspx? 感谢回答。 – 2015-02-06 16:32:47

+0

什么意思是“不工作”?Timer_Tick事件至少提出? – 2015-02-06 16:38:20

+0

Yeap ..它甚至没有提出。 – 2015-02-06 17:01:02

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

+0

我很喜欢你的答案!我可以重新加载我的页面,每隔一段时间用这段代码初始化(): ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window.location.reload(true);' ,20000);“,true);我在公司的框架下工作,所以它给了我建立datagridview的方法,无论如何,我会看看你的帖子。再次感谢。 – 2015-02-06 17:04:41

+0

@ Maverick.pe后面的代码在发送响应后不再在页面中扮演任何角色,因此它不能调用客户端代码。您需要使用我讨论的实时数据技术之一重新考虑您的策略。 – mason 2015-02-06 17:17:01

+0

Yeap ..即时通讯与您讨论的其他实时数据技术尝试。我尝试UpdatePanel和Ajax轮询,但它没有工作,我会尝试与SignalR =)谢谢。 – 2015-02-06 17:45:24

在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,例如,但他们都不是最好的解决办法,如果你只是想用它来刷新页面
+0

但是这会不时刷新我的网页,我只需要重新加载,如果在代码背后=(谢谢 如果我使用此代码初始化(): ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window .location.reload(true);',20000);“,true); 其作品,但如果我试图在Timer1_Tick上使用它..它不起作用。叹息* – 2015-02-06 16:19:05

+0

@ Maverick.pe然后你必须向服务器发出请求,就像Arthur Castro的回答一样。在页面加载完成后你不能发送任何东西给客户端。除非你使用SignalR(或者它的底层技术,比如websockets,SSE等),否则客户端和服务器之间的连接会关闭。 – Andre 2015-02-06 16:50:19

+0

我会搜索SignalR,我从来没有听说过它。谢谢=) – 2015-02-06 17:16:55