定期刷新asp控件

时间:2012-07-02 12:08:32

标签: asp.net refresh global-asax

我在WCF服务项目中有一个aspx Web表单,它提供有关该服务的状态报告。目前我有一个刷新按钮,但我想自动定期刷新。

我尝试了两种方法:

  1. 使用<head>setInterval()内的javascript,并使用Page_LoadRegisterStartupScript中启动。
  2. Systems.Timers.Timer内的Page_Load,执行按钮点击操作。
  3. 我没有得到(1)正确的,因为明显的范围问题,我显然误解了它应该如何工作。目前,该脚本只是发出警报,我无法进一步。

    我没有得到(2)正确,虽然它似乎应该可以工作,因为在计时器函数中放置一个断点会显示正确的值,但页面上的表单标签不会更新。

    webform.aspx如下所示:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Manage.aspx.cs" Inherits="MyServiceWS.ManageForm" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Manage</title>
        <script type="text/javascript">
            // method (1)
            RefreshScript = function ()
            {
                setInterval(function () { alert("How to call the Refresh code?"); }, 5000);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server" />
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <p>
                    Synchronisation status: 
                    <asp:Label ID="SyncStatusLabel" runat="server" />
                    <p>
                    <asp:Button ID="RefreshButton" runat="server" Text="Refresh" 
                        onclick="RefreshButton_Click" />
                    <p>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>
    </html>
    

    webform.aspx.cs中的c#代码如下所示。这是所需刷新代码所在的位置。当然,我一次只尝试一种方法,为了清楚起见,我们在下面都没有注释它们。

    namespace MyServiceWS
    {
        public partial class ManageForm : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // method (1)
                ClientScript.RegisterStartupScript(this.GetType(), "addScript", "RefreshScript()", true);
    
                if (Page.IsPostBack)
                    Refresh();
                else
                { // method (2)
                    var myTimer = new System.Timers.Timer();
                    myTimer.Elapsed += new ElapsedEventHandler(TimedRefreshEvent);
                    myTimer.Interval = 5000;
                    myTimer.Start();
                }
            }
            protected void RefreshButton_Click(object sender, EventArgs e)
            {
                Refresh();
            }
    
            private void TimedRefreshEvent(object source, ElapsedEventArgs e)
            {
                Refresh();
            }
    
            private void Refresh()
            {
                SyncStatusLabel.Text = Global.StatusDescription;
            }
        }
    }
    

    Global.asax文件包含静态字符串变量StatusDescription,该变量正确包含服务在其他位置填充的状态。

    我很难过,方法是否正确,我该如何处理?

2 个答案:

答案 0 :(得分:0)

改变这个:

RefreshScript = function () 
        { 
            setInterval(function () { alert("How to call the Refresh code?"); }, 5000); 
        } 

要:

function RefreshScript()
{ 
     setInterval(function () { alert("How to call the Refresh code?"); }, 5000); 
} 

看看它是否更好。

您也可以使用计时器方法,但不能通过System.Timers.Timer;使用ASP.NET AJAX timer control

答案 1 :(得分:0)

我设法通过将工具箱中的AJAX计时器添加到UpdatePanel并使用OnTick属性来调用RefreshButton_Click

来解决此问题

按照说明here.