需要按照服务器时间定期自动刷新Asp.Net页面....如上午7:06,上午8:06,上午9:06,上午10:06,上午11:06 ..... .till 9:06 PM

时间:2015-01-13 15:49:37

标签: asp.net httpresponse page-refresh response.redirect

代码如下所示,我使用Timer的事件处理程序“ElapsedEventHandler”来调用Response.AppendHeader或Response.Redirect方法,但我在Response对象上得到“对象引用未设置为对象的实例”。谁可以帮忙解决这个问题?

想要动态设置刷新时间,然后通过添加服务器端代码在ASP.NET中完成

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    const double interval60Minutes = 60 * 60 * 1000; // milliseconds to one hour

    Timer checkForTime = new Timer(interval60Minutes);

    //checkForTime.
    checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
    checkForTime.Enabled = true;
  }
}

public void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
  if (timeIsReady(DateTime.Now.ToString("hh:mm tt").ToLower())) //12 Hour Date Format : 03:01 PM
  {
    System.Web.HttpContext.Current.Response.AppendHeader("Refresh", "2;Slider.aspx");

    //Or
    //System.Web.HttpContext.Current.Response.Redirect("Slider.aspx");
  }
}

private bool timeIsReady(string time)
{
  if (time.Contains("07:06 am"))
    return true;
  else if (time.Contains("08:06 am"))
    return true;
  else if (time.Contains("09:06 am"))
    return true;
  else if (time.Contains("10:06 am"))
    return true;
  else if (time.Contains("11:06 am"))
    return true;
  else if (time.Contains("00:06 pm"))
    return true;
  else if (time.Contains("01:06 pm"))
    return true;
  else if (time.Contains("02:06 pm"))
    return true;
  else if (time.Contains("03:06 pm"))
    return true;
  else if (time.Contains("04:06 pm"))
    return true;
  else if (time.Contains("05:06 pm"))
    return true;
  else if (time.Contains("06:06 pm"))
    return true;
  else if (time.Contains("07:06 pm"))
    return true;
  else if (time.Contains("08:06 pm"))
    return true;
  else if (time.Contains("09:06 pm"))
    return true;
  else
    return false;
}

1 个答案:

答案 0 :(得分:0)

我没有亲自使用Timer控件,但一般认为Ajax ExtensionsUpdatePanels已损坏,过时且应该避免。这是我们多年前采用的方法。它定义了您需要添加到页面的自定义控件。 (你不能只是实例化它。)

您需要修改seconds值并注册控件等。我不知道此控件是否可以在UpdatePanel内运行,但我对此表示怀疑。

[ToolboxData("<{0}:PostBackTimer runat=\"server\" />"), DefaultProperty("Seconds"), DefaultEvent("Timeout")]
public class PostBackTimer : Control, IPostBackEventHandler
{
    public PostBackTimer() { }

    [Description("PostBackTimer_OnTimeout")]
    public event EventHandler Timeout = delegate { };

    public void RaisePostBackEvent(string eventArgument)
    {
        Timeout(this, EventArgs.Empty);
    }

    protected override void OnPreRender(EventArgs e)
    {
        var seconds = 45;

        var postback = Page.ClientScript.GetPostBackEventReference(this, null);
        var script = string.Format("setTimeout(\"{0}\",{1});", postback, seconds * 1000);
        Page.ClientScript.RegisterStartupScript(GetType(), "PostBackTimer_" + UniqueID, script, true);

        base.OnPreRender(e);
    }
}