Como executar JavaScript antes System.Web.UI.Timer OnTick?
-
22-07-2019 - |
Pergunta
Eu preciso de um script do lado do cliente para confirmar que o evento OnTick do temporizador pode prosseguir.
Como invoco CanContinue () antes do postback Timer1 ocorre?
Como faço para cancelar a postagem se o usuário seleciona o Anular?
<%@ Page Language="C#" %>
<script runat="server">
protected void Timer1_OnTick(object sender, EventArgs e)
{
Response.Write("Last Postback: " + DateTime.Now.ToString());
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Timer Test</title>
<script type="text/javascript" language="javascript">
function CanContinue() {
return confirm('The page is requesting new data. Ok or Cancel?');
}
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer ID="Timer1" runat="server" OnTick="Timer1_OnTick" Interval="300000" />
</form>
</body>
</html>
NOTA: Alguns leitores podem ter problema com mostrando uma confirmação modal cada x minutos. Concordo que este é pobre para a usabilidade, mas eu não estou em posição de mudar o projeto.
UPDATE: Eu decidi não usar um temporizador depois de tudo. Consulte este pós para detalhes sobre uma solução alternativa.
Solução 2
Eu decidi não usar um temporizador depois de tudo. Consulte este pós para detalhes sobre uma solução alternativa.
Outras dicas
Eu não sei se existe uma maneira de amarrar-se para o método gerado pelo temporizador para invocar a ação do servidor. No entanto, você pode ganhar uma referência ao componente javascript e iniciar / parar ou alterar o intervalo. Com isto em mente, você pode fazer alguma pirataria desagradável para obter a funcionalidade desejada.
Por exemplo:
- Ganho uma referência ao seu timer. (Algo como:
$find(‘<%= Timer1.ClientID %>’);
) - Stop the timer.
- Criar um novo temporizador com o mesmo intervalo.
- Execute o seu temporizador e causar a doença.
- Dependendo do valor de retorno de sua condição .. você pode definir o intervalo de temporizador servidor gerado para ~ 0 e iniciar / parar.
Esta não é uma solução elegante, mas eu não posso dizer que eu já trabalhei com construído em temporizadores asp.net, então não posso oferecer muito insight.