代码如下所示,我使用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;
}
答案 0 :(得分:0)
我没有亲自使用Timer控件,但一般认为Ajax Extensions
和UpdatePanels
已损坏,过时且应该避免。这是我们多年前采用的方法。它定义了您需要添加到页面的自定义控件。 (你不能只是实例化它。)
您需要修改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);
}
}