2012-09-24 2 views
1

여기에 아주 간단한 코드가 있지만, 왜 내가 작동하지 않는 이유가 작동하지 않는지 알 수 없습니다.UpdatePanel.Update() 메서드가 UpdatePanel 컨트롤의 내용을 업데이트하지 않습니까?

나는 다음과 같은 HTML을 포함 Update.aspx라는 페이지가 있습니다 :

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<div> 
    Non Panel <%= Date.Now.ToLongTimeString%> 
</div> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="lbl" runat="server">Updates in 5</asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

코드 뒤에 다음과 같습니다

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim t As New Timers.Timer 
     t.Interval = 5000 
     AddHandler t.Elapsed, AddressOf raiseupdate 
     t.Start() 
    End Sub 

    Private Sub raiseupdate(ByVal sender As Object, ByVal e As System.EventArgs) 
     sender.stop() 
     lbl.Text = Date.Now.ToLongTimeString 
     UpdatePanel1.Update() 
    End Sub 

이 나는 ​​일이 기대하고있는 무슨이다 : 페이지 표시 업데이트 패널에서 "Updates in 5"라는 단어 타이머가 경과하여 raiseupdate() 메서드를 호출하면 업데이트 패널의 내용을 새로 고치는 업데이트 패널 update()이 호출됩니다.

실제로 발생하는 현상은 다음과 같습니다. 타이머가 경과하고 업데이트 패널 update() 메서드 행에 도달했으나 데이터가 페이지로 되돌아 오지 않는 것처럼 보입니다. 즉, "Updates in 5"라는 단어는 현재 시간으로 대체되지 않습니다.

그래서 나는 update() 메서드가 실제로하는 일에 대한 근본적인 오해를 봤지만, 어디서 잘못되었는지 알 수는 없다. 이 작업을하려면 어떻게해야합니까?

+0

ASP.NET 스레딩 (본질적으로 멀티 스레딩)은 _fairly simple_ 이라고 부르는 것이 아닙니다. 대신에''Ajax Timer control' (http://ajax.net-tutorials.com/controls/timer-control/)을 사용하지 않으시겠습니까? Timer and threads : http://stackoverflow.com/a/1436331/284240 –

+0

이 예제를 확장하여 반환 할 때 비동기 요청을하고 updatepanel을 업데이트 할 수있는 가능성을 모색 중이므로. _ 그러면 그것은 복잡해질 것입니다. –

답변

2

두 개의 업데이트처럼 보입니다. 하나는 업데이트 패널에서, 하나는 타이머에서 코드를 엉망으로 만들고 있습니다.

대신 당신이 아약스 타이머를 사용하고 AsyncPostBack으로이 추가 할 수는

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<div> 
    Non Panel <%= Date.Now.ToLongTimeString%> 
</div> 
<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="5000" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="lbl" runat="server">Updates in 5</asp:Label> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID="Timer1" /> 
    </Triggers> 
</asp:UpdatePanel> 

귀하의 VB 코드는이

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

End Sub 

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) 
    lbl.Text = Date.Now.ToLongTimeString 

End Sub 

의 경우처럼 보일 것입니다 .. ... 이것은 당신을위한 일을해야 트리거 이것은 수동으로 Timer_tick 이벤트에서 Update()를 호출 할 수 없습니다.

+0

영감을 얻어야합니다. 이 답변은 완전히 다른 방향으로 나를 데려 갔지만 궁극적으로 나는 당신의 방법을 사용하고 싶은 것을 얻을 수 있다고 생각합니다. –

관련 문제