如何从后面的代码刷新一个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>
编辑:
- 我使用.NET框架3.5
- 我试过这个post但它不起作用。
- 感谢您的回答。
我建议您使用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。
我试过了,但它不起作用。 注:我工作在我公司的框架和主页。我在一个新的.aspx页面上尝试了这个例子,它工作='(我应该从我的.aspx? 感谢回答。 – 2015-02-06 16:32:47
什么意思是“不工作”?Timer_Tick事件至少提出? – 2015-02-06 16:38:20
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。他们是棘手和低效的。
我很喜欢你的答案!我可以重新加载我的页面,每隔一段时间用这段代码初始化(): ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window.location.reload(true);' ,20000);“,true);我在公司的框架下工作,所以它给了我建立datagridview的方法,无论如何,我会看看你的帖子。再次感谢。 – 2015-02-06 17:04:41
@ Maverick.pe后面的代码在发送响应后不再在页面中扮演任何角色,因此它不能调用客户端代码。您需要使用我讨论的实时数据技术之一重新考虑您的策略。 – mason 2015-02-06 17:17:01
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,例如,但他们都不是最好的解决办法,如果你只是想用它来刷新页面
但是这会不时刷新我的网页,我只需要重新加载,如果在代码背后=(谢谢 如果我使用此代码初始化(): ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window .location.reload(true);',20000);“,true); 其作品,但如果我试图在Timer1_Tick上使用它..它不起作用。叹息* – 2015-02-06 16:19:05
@ Maverick.pe然后你必须向服务器发出请求,就像Arthur Castro的回答一样。在页面加载完成后你不能发送任何东西给客户端。除非你使用SignalR(或者它的底层技术,比如websockets,SSE等),否则客户端和服务器之间的连接会关闭。 – Andre 2015-02-06 16:50:19
我会搜索SignalR,我从来没有听说过它。谢谢=) – 2015-02-06 17:16:55
有你在你的应用程序中使用SignalR考虑? – rajeemcariazo 2015-02-06 15:51:30
@rajeemcariazo我不熟悉SignalR,生病看看谢谢 – 2015-02-06 16:02:13
@Izzy我已经试过这个帖子,但没有任何作品,谢谢 – 2015-02-06 16:02:39