如何从后面的代码中刷新一个 asp 页面? C# [重复]

Posted

技术标签:

【中文标题】如何从后面的代码中刷新一个 asp 页面? C# [重复]【英文标题】:How can i refresh a asp page from code behind? C# [duplicate] 【发布时间】: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>

编辑:

    我正在使用 Framework .NET 3.5 我试过这个post,但它不起作用。 感谢您的回答。

【问题讨论】:

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

以上是关于如何从后面的代码中刷新一个 asp 页面? C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c# asp.net GridView中如何删除一条记录后刷新页面

检测页面刷新 jQuery 或 C# ASP.Net

asp.net用的C#语言能不能做到点击按钮不刷新页面?

将对象从dll文件传递到文件asp.net c#后面的代码

Asp.net 从 asp 中的文本框获取值到代码后面

如何从 .aspx 页面 javascript 调用 C# 方法后面的 Web 窗体代码