Pergunta

Eu tenho uma página onde quando alguma operação dá errado eu quero começar o temporizador, aguarde 30 segundo, parar o temporizador e repita a operação. Cada vez que o temporizador começa Eu preciso informar o usuário sobre isso alterando o texto de algum rótulo.

Como posso fazê-lo?

Foi útil?

Solução

Se bem entendi, o que eu acho que você deve usar um temporizador (javascript) do lado do cliente em vez disso. Você não pode usar um temporizador do lado do servidor para isso.

Quando você detectar o erro de condição, você atualizar o rótulo em conformidade e exibi-lo para o usuário. Ao mesmo tempo você invocar um temporizador do lado do cliente que irá postback após 30 segundos.

por exemplo. coloque o seguinte temporizador-código na sua página:

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

No caso do erro de condição, você tem que ter certeza que o temporizador do lado do cliente será iniciado:

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

Espero que isso ajude (o código não é testado, já que eu não tenho visual studio disponível agora).

Update:

Para "simular" um clique de botão, você tem que passar a ID de cliente do botão para o método __doPostBack (), por exemplo:

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

Para algumas outras possibilidades, consulte o seguinte pergunta / resposta:

Outras dicas

do lado do cliente para forçar uma postagem que você pode chamar diretamente o método __doPostBack

Ele recebe dois argumentos, EventTarget e eventArgument; desde que você está fazendo esta chamada fora do ciclo asp.net normal, você terá que verificar IsPostBack em seu evento de carregamento de página (ou o init, sua escolha) - se for uma nova postagem, então você vai precisar de olhar para os dois argumentos que se rolou -se como elementos de formulário (Request [ "__ EVENTTARGET"]). Verifique o seu valor para ver se a postagem veio de sua chamada ou um dos outros controles, se o valor desses jogos que você passa na do lado do cliente, em seguida, fazer a sua mudança para o teste de etiqueta

Duas maneiras de fazer isso, primeiro caminho, um pouco melhor se você precisa chamar outras funções no mesmo segmento. Adicionar um ScriptManager e um temporizador para a página aspx, você pode cair de caixa de ferramentas ou simplesmente introduzir o código. ScriptManager deve ser declarada antes de asp: Temporizador. incêndios OnTick após cada intervalo.

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

No código por trás (c #, neste caso):

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

A segunda maneira não tão bom se você precisa das funções para o fogo no mesmo segmento. Você pode fazer um temporizador em ASP.net usando C #, o seguinte código dispara a função a cada 2 segundos. No arquivo por trás de código (.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;
    }

Em seguida, fazer a função que deseja chamar neste formato:

//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);
    }

Exemplo de saída:

Output

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top