如何从代码隐藏中刷新asp页面?C#

如何从代码隐藏中刷新asp页面?C#,c#,asp.net,timer,reload,code-behind,C#,Asp.net,Timer,Reload,Code Behind,我在这方面是新手,我的英语也很差。无论如何: 我正在尝试设置一个计时器,以便在报告中有任何新记录时刷新页面。显然,我的计时器工作正常,因为当我调试它时,它会进入函数Timer1\u Tick,但它不会刷新我的页面 代码如下: System.Timers.Timer Timer1 = new System.Timers.Timer(); Timer1.Interval = 10000; Timer1.Elapsed += Timer1_Tick; Timer1.Enabled = true; 及

我在这方面是新手,我的英语也很差。无论如何:

我正在尝试设置一个计时器,以便在报告中有任何新记录时刷新页面。显然,我的计时器工作正常,因为当我调试它时,它会进入函数
Timer1\u Tick
,但它不会刷新我的页面

代码如下:

System.Timers.Timer Timer1 = new System.Timers.Timer();
Timer1.Interval = 10000;
Timer1.Elapsed += Timer1_Tick;
Timer1.Enabled = true;


函数刷新页面()
{
window.location.reload()
}
编辑:

  • 我正在使用Framework.NET3.5
  • 我试过了,但没用
  • 谢谢你的回答

  • 这不起作用的原因是,一旦响应从服务器发送到客户端,服务器就不能再修改响应,因此无法注册启动脚本。您必须记住服务器端和客户端之间的区别

    相反,您可以用JavaScript实现在客户端运行的计时器,如中所述


    但是,这并不理想,因为现在您的页面将再次请求页面的整个HTML。那是一大笔开销。相反,您应该只刷新所需的数据。我在中介绍了各种技术,其中讨论了UpdatePanel、AJAX轮询和使用Signal。注意:我特别建议不要使用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>
    

    asp:ScriptManager组件是使用更新面板所必需的。更多信息。

    asp.net提供页面服务后,将停止与服务器的通信。页面加载完成后,无法将通知从代码隐藏推送到客户端*

    如果您只是想在一段时间后重定向用户,请检查客户端上的时间,如:

    C#:

    JavaScript

    <script type="text/javascript">
    function RefreshPage()
    {
        setTimeout(function(){
             window.location.reload();
        }, 10000);
    }
    </script>
    
    
    函数刷新页面()
    {
    setTimeout(函数(){
    window.location.reload();
    }, 10000);
    }
    
    否则,您可以随时创建从客户端到服务器的请求

    • 例如,有WebSocket和SSE,但如果您只是想用它们刷新页面,它们并不是最好的解决方案

    您考虑过在应用程序中使用Signal吗?@rajeemcariazo我不熟悉Signal,我来看看thanks@Izzy我已经试过了,但是没有效果,谢谢你“没有效果”。@JasonMArcher嗨,*Izzy说我应该看看这篇文章()但是在我把问题发到这里之前,我已经试过那篇文章的答案了。这就是为什么我说:“这一切都不起作用。”。我将修改我的问题并发布一些传统代码。谢谢回复=)但这会不时刷新我的页面,如果代码隐藏=(谢谢。如果我在初始化()时使用此代码:ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window.location.reload(true);',20000);”,true);它可以工作,但如果我试图在Timer1_Tick上使用它……它不起作用。Sigh*@Maverick.pe然后你必须向服务器发出请求,如Arthur Castro的回答。在页面加载完成后,你不能向客户端发送任何内容。除非你使用Signar(或它的底层技术,如websockets、SSE等),客户端和服务器之间的连接已关闭。我将搜索有关Signal的信息,我从未听说过。谢谢=)我尝试过它,但它不起作用。注意:我在公司的框架和母版页下工作。我在新的.aspx页上尝试了此示例,它可以工作(我应该发布我的.aspx的全部代码吗?谢谢你的回答。你说的“不工作”是什么意思“?Timer_Tick事件至少已引发?是的..它甚至没有引发。在这种情况下,您应该问另一个问题。我提供的代码回答了这个问题。我很喜欢您的答案!我可以在初始化()时每隔一段时间重新加载我的页面,使用以下代码:ScriptManager.RegisterStartupScript(this,GetType(),“refresh”,“window.setTimeout('window.location.reload(true);',20000);“,true);但是如果代码隐藏中出现问题,我需要重新加载页面=(.我在我公司的框架下工作,因此它为我提供了构建datagridview的方法,无论如何,我会在你的帖子上看一看。再次感谢。@Maverick.pe在发送响应后,后面的代码不再在页面中扮演任何角色,因此它不能调用客户端代码。你需要使用一种实时数据技术重新思考你的策略我讨论过的ues。是的。我正在尝试您讨论过的其他实时数据技术。我尝试过UpdatePanel和Ajax轮询,但不起作用。我将尝试使用SignalR=)谢谢.@Maverick.pe如果您配置得当,我介绍的所有技术都会起作用。更重要的是选择适合您情况的最佳技术,然后正确实施。
    <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();
    }
    
    Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "RefreshPage()", true);
    
    <script type="text/javascript">
    function RefreshPage()
    {
        setTimeout(function(){
             window.location.reload();
        }, 10000);
    }
    </script>