2015-01-13 7 views
0

코드는 아래 주어진 것처럼 Timer의 이벤트 처리기 "ElapsedEventHandler"를 사용하여 Response.AppendHeader 또는 Response.Redirect 메서드를 호출하지만 "개체 참조가 개체 인스턴스로 설정되지 않았습니다. "를 Response 객체에 추가합니다. 이걸 도울 수있는 사람 ??정기적 인 서버 시간에 따라 Asp.Net 페이지를 새로 고침해야합니다. 오전 7:06, 오전 8시 06 분, 오전 9시 06 분, 오전 10시 06 분, 오전 11:06 ..till 9:06 PM

개인적으로 Timer 컨트롤을 사용하지 않은

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

가능 중복 [타이머 사용 HttpContext.Current 원인이 될 널 (http://stackoverflow.com/questions/18652038/use-of-timer-causes-httpcontext-current-to-be- null) – CodeCaster

+0

타이머가 작동하면 응답이 없습니다. – CodeCaster

+0

@CodeCaster 어떤 단서, 어떻게 우리가 이것을 얻을 수 있습니까 ??? – samj28

답변

0

서버 측 코드를 추가하지만, 일반적으로 느낌에 ASP.NET에서 수행 할 수있는 동적 다음 새로 고침 시간을 설정할 것을 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); 
    } 
}