我如何从代码隐藏中刷新 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>
编辑:
- 我正在使用 Framework .NET 3.5
- 我试过这个 post 但它不起作用。
- 感谢您的回答。
这不起作用的原因是一旦响应从服务器发送到客户端,服务器就不能再修改响应,因此它不能注册启动脚本。您必须牢记 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,但如果您只想使用它来刷新页面,它们不是最佳解决方案
我是新手,我的英语也很差。不管怎样:
我正在尝试设置一个计时器,以便在我的报告中有任何新记录时刷新我的页面。显然我的计时器工作正常,因为当我调试它时它进入函数 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>
编辑:
- 我正在使用 Framework .NET 3.5
- 我试过这个 post 但它不起作用。
- 感谢您的回答。
这不起作用的原因是一旦响应从服务器发送到客户端,服务器就不能再修改响应,因此它不能注册启动脚本。您必须牢记 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,但如果您只想使用它来刷新页面,它们不是最佳解决方案