문제

작업이 잘못되면 타이머를 시작하고 30 초를 기다리고 타이머를 멈추고 작업을 다시 시도하는 페이지가 있습니다. 타이머가 시작될 때마다 레이블의 텍스트를 변경하여 사용자에게 정보를 제공해야합니다.

어떻게하니?

도움이 되었습니까?

해결책

내가 올바르게 이해하면 대신 클라이언트 측 (JavaScript) 타이머를 사용해야한다고 생각합니다. 이를 위해 서버 측 타이머를 사용할 수 없습니다.

오류 조건을 감지하면 레이블을 그에 따라 업데이트하여 사용자에게 표시합니다. 동시에 30 초 후에 포스트백이되는 클라이언트 측 타이머를 호출합니다.

예를 들어 다음 타이머 코드를 페이지에 넣습니다.

  <script>
    function StartTimer()
    {
      setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds
    }
    function DoPostBack()
    {
      __doPostBack(); // invoke the postback
    }
  </script>

오류 조건의 경우 클라이언트 측 타이머가 시작되어야합니다.

if (error.Code == tooManyClientsErrorCode)
{
  // add some javascript that will call StartTimer() on the client
  ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true);
  //...
}

이것이 도움이되기를 바랍니다 (현재 시각적 스튜디오가 없기 때문에 코드가 테스트되지 않았습니다).

업데이트:

버튼 클릭을 "시뮬레이션"하려면 버튼의 클라이언트 ID로 __dopostback () 메소드로 전달해야합니다.

function DoPostBack()
{
  var buttonClientId = '<%= myButton.ClientID %>';
  __doPostBack(buttonClientId, ''); // simulate a button click
}

다른 가능성은 다음 질문/답변을 참조하십시오.

다른 팁

클라이언트 측에서 포스트 백 강제로 __dopostback 방법을 직접 호출 할 수 있습니다.

이벤트 타겟과 이벤트 어 구역의 두 가지 주장이 필요합니다. 일반 ASP.NET주기 외부 에서이 호출을하고 있으므로 페이지로드 이벤트 (또는 초기, 선택)에서 ISPOSTBACK을 확인해야합니다. 양식 요소로 UP (request.form [ "__ EventTarget"]). 값을 확인하여 Postback이 전화 나 다른 컨트롤 중 하나에서 왔는지 확인하십시오. 해당의 가치가 클라이언트 측에서 전달 된 내용과 일치하는 경우 라벨 테스트로 변경하십시오.

이 작업을 수행하는 두 가지 방법은 동일한 스레드에서 다른 기능을 호출 해야하는 경우 조금 더 좋습니다. ScriptManager와 타이머를 ASPX 페이지에 추가하면 Toolbox에서 삭제하거나 코드를 입력 할 수 있습니다. ScriptManager는 ASP : 타이머 전에 선언해야합니다. 간격마다 발사됩니다.

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:Timer ID="Timer1" runat="server" Interval="4000" OnTick="Timer1_Tick">
    </asp:Timer>

뒤에있는 코드 (이 경우 C#)에서 :

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("tick tock");
    }

두 번째 방법은 같은 스레드에서 발사 할 기능이 필요하다면 좋지 않습니다. C#을 사용하여 ASP.NET에서 타이머를 수행 할 수 있습니다. 다음 코드는 2 초마다 함수를 시작합니다. 뒤의 코드 (.CS) 파일에서 :

    // timer variable
    private static System.Timers.Timer aTimer;

    protected void Page_Load(object sender, EventArgs e)
    {
        // Create a timer and set a two second interval.
        aTimer = new System.Timers.Timer();
        aTimer.Interval = 2000;

        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;

        // Have the timer fire repeated events (true is the default)
        aTimer.AutoReset = true;

        // Start the timer
        aTimer.Enabled = true;
    }

그런 다음 호출하려는 기능을이 형식으로 만드십시오.

//Doesn't need to be static if calling other non static functions

    private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }

샘플 출력 :

Output

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top