2010-04-22 3 views
1

Ajax 카운트 다운 타이머가 표시된 곳에서 웹 응용 프로그램을 만들려고합니다. 버튼을 누를 때마다 카운트 다운은 30으로 돌아가서 계속 카운트 다운해야합니다.ASP.NET/AJAX - 타이머가 올바르게 작동하지 않습니다.

이제 버튼을 누를 때마다 타이머가 1 초 또는 2 초 동안 계속 카운트 다운을 유지하고 타이머가 30 초 동안 계속 서있을 때마다 문제가 발생합니다.

웹폼 코드 : 뒤에

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Label ID="Label1" runat="server" Text="geen verbinding"></asp:Label> 
     <br /> 
     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 
     <br /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick"> 
</asp:Timer> 

</form> 

코드 :

static int timer = 30; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    Label1.Text = timer.ToString(); 
} 
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    timer--; 

} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    timer = 30;   
} 

희망 누군가가 문제가 무엇인지 알고 어쨌든이있는 경우이 문제를 해결 할 수 있습니다. 사전에

감사합니다!

+0

서버에 부분적인 포스트 백을 수행하기 때문에 약간의 지연이 발생할 수 있습니다. – derek

+0

하지만 거기에 반대하거나 뭔가를 계산해야합니다. – Julian

+0

정적 인 타이머는 페이지에 액세스하는 모든 사람으로 나뉩니다. 세션 당 하나의 타이머가 있어야합니다. (페이지에 액세스하는 클라이언트가 둘 이상인 경우) –

답변

0

문제는 Visual Studio에서 localhost로 호스팅한다는 것입니다. URL 내에서 로컬 호스트 대신 IP 주소 127.0.0.1을 사용하면 빠르게 작동합니다. 나는 이것이 빠른 기계에서 문제가되지 않을 것이라고 생각한다. 슬프게도 그 당시에는 아무 것도 없었다.

편집 :이 질문에 현상금을 추가하는 것은 실수였습니다. 죄송합니다.

1

타이머가 비동기 적으로 페이지를 처리하고 있기 때문에 버튼 클릭 이벤트가 서버에서 처리하는 데 시간이 걸리므로 타이머 이벤트는 여전히 버튼 클릭 이벤트 사이에서 발생하므로 타이머는 두 번째 또는 두 번째로 계속 계산됩니다. 자바 스크립트를 사용하여 재설정 버튼을 클릭하자마자 레이블을 클라이언트 측에서 30으로 설정하십시오. 타이머 클릭 이벤트가 발생하면 레이블 값을 감소시키고 (타이머가 아님) 레이블에 새 값을 할당하십시오. timer int 변수가 필요 없습니다. 또한 페이지가로드 될 때 페이지가 렌더링 될 때만 레이블 값을로드하려는 경우 페이지가 다시 게시되지 않는 경우 (즉, IsPostback이 false 인 경우) 레이블 값을 할당합니다. 나머지 시간은 타이머 클릭 이벤트가 값을 할당합니다.

관련 문제