【问题标题】:Need to auto refresh Asp.Net page as per Server time on a regular interval.... like 7:06 AM,8:06 AM,9:06 AM,10:06 AM, 11:06 AM......till 9:06 PM需要根据服务器时间定期自动刷新 Asp.Net 页面.... 比如上午 7:06、上午 8:06、上午 9:06、上午 10:06、上午 11:06 ...... .直到晚上 9:06
【发布时间】:2023-11-13 18:02:01
【问题描述】:

代码如下所示,我正在使用 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;
}

【问题讨论】:

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


【解决方案1】:

我没有亲自使用过 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);
    }
}

【讨论】: