OnclientClick e OnClick não estão funcionando ao mesmo tempo?

Eu tenho um botão como o seguinte,

<asp:Button ID="pagerLeftButton" runat="server" OnClientClick="disable(this)" onclick="pager_Left_Click" Text=" 

Quando eu uso meu botão assim, onclick não está triggersndo. Quando eu removo o OnClientClick, o onclick está triggersndo.

O que eu preciso fazer é desativar o botão durante o postback e ativá-lo após o final da postagem.

Edit: Informações adicionais:

Eu adicionei break point para minhas funções de disparo é c # parte e estou depurando, eles não estão triggersndo com certeza. Essas funções são como

 protected void pager_Left_Click(object sender, EventArgs e) { //Do smthing. } protected void pager_Right_Click(object sender, EventArgs e) { //Do smthing. } 

e quando clico no meu botão, ele é desabilitado por 1 a 2 segundos e habilitado automaticamente, mas não sei por que ele está habilitado. Não adicionei nenhuma parte para que seja ativada novamente.

    Deste artigo no web.archive.org :

    O truque é usar as propriedades OnClientClick e UseSubmitBehavior do controle de botão. Existem outros methods, envolvendo código no lado do servidor para adicionar atributos, mas acho que a simplicidade de fazê-lo dessa forma é muito mais atraente:

      

    OnClientClick permite que você adicione o script OnClick do lado do cliente. Nesse caso, o JavaScript desabilitará o elemento button e alterará seu valor de texto para uma mensagem de progresso. Quando o postback for concluído, a página recém-renderizada reverterá o botão de volta ao estado inicial sem qualquer trabalho adicional.

    A única armadilha que vem com a desativação de um botão de envio no lado do cliente é que ele cancelará o envio do navegador e, portanto, o postback. Definir a propriedade UseSubmitBehavior como false diz ao .NET para injetar o script de cliente necessário para triggersr o postback de qualquer maneira, em vez de confiar no comportamento de envio de formulário do navegador. Nesse caso, o código que ele injeta seria:

     __doPostBack('BtnSubmit','') 

    Isto é adicionado ao final do nosso código OnClientClick, dando-nos este HTML renderizado:

      

    Isso fornece um bom efeito de desativação de botão e processamento de texto, enquanto o postback é concluído.

    OnClientClick parece ser muito exigente quando usado com OnClick.

    Eu tentei sem sucesso com os seguintes casos de uso:

     OnClientClick="return ValidateSearch();" OnClientClick="if(ValidateSearch()) return true;" OnClientClick="ValidateSearch();" 

    Mas eles não funcionaram. O seguinte trabalhou:

      

    Vinay (acima) deu um trabalho eficaz. O que realmente faz com que o evento OnClick do botão não funcione após a function de evento OnClientClick é que o MS o definiu onde, quando o botão está desabilitado (na function chamada pelo evento OnClientClick), o botão “honra” isso não tentando concluir a atividade do botão chamando o método definido do evento OnClick.

    Eu lutei várias horas tentando descobrir isso. Depois que eu removi a instrução para desabilitar o botão de envio (que estava dentro da function OnClientClick), o método OnClick foi chamado sem mais nenhum problema.

    Microsoft, se você estiver ouvindo, quando o botão for clicado, ele deverá concluir a atividade atribuída, mesmo se estiver desativado durante parte dessa atividade. Contanto que não seja desativado quando for clicado, ele deverá concluir todos os methods atribuídos.

    Há duas questões aqui:

    Desativar o botão no lado do cliente impede o postback

    Para superar isso, desative o botão após o evento onclick do JavaScript. Uma maneira fácil de fazer isso é usar setTimeout como sugerido por esta resposta .

    Além disso, o código OnClientClick é executado mesmo se a validação do ASP.NET falhar, por isso, provavelmente é uma boa ideia adicionar uma verificação de Page_IsValid . Isso garante que o botão não seja desativado se a validação falhar.

     OnClientClick="(function(button) { setTimeout(function () { if (Page_IsValid) button.disabled = true; }, 0); })(this);" 

    É melhor colocar todo esse código JavaScript em sua própria function, como mostra a pergunta:

     OnClientClick="disable(this);" function disable(button) { setTimeout(function () { if (Page_IsValid) button.disabled = true; }, 0); } 

    Desativar o botão no lado do cliente não o desativa no lado do servidor

    Para superar isso, desative o botão no lado do servidor. Por exemplo, no manipulador de events OnClick :

     OnClick="Button1_Click" protected void Button1_Click(object sender, EventArgs e) { ((Button)sender).Enabled = false; } 

    Por fim, lembre-se de que evitar pressionamentos de botão duplicados não impede que dois usuários diferentes enviem os mesmos dados ao mesmo tempo. Certifique-se de contabilizar isso no lado do servidor.

    E se você não definir imediatamente o botão para desativado, mas atrasar isso por meio de setTimeout? Sua function ‘desativar’ retornaria e o envio continuaria.

    Seu JavaScript está bem, a menos que você tenha outros scripts em execução nesta página que possam corromper tudo. Você pode verificar isso usando o Firebug .

    Eu testei um pouco e realmente parece que o ASP.net ignora os controles desativados. Basicamente, o postback é emitido, mas provavelmente o framework ignora tais events, uma vez que “assume” que um botão desativado não pode gerar nenhum postback e, portanto, ignora manipuladores possivelmente anexados. Agora este é apenas o meu raciocínio pessoal, pode-se usar o Reflector para verificar isso com mais profundidade.

    Como uma solução, você poderia realmente tentar fazer a desativação em um momento posterior, basicamente atrasar a chamada control.disabled = "disabled" usando um JavaTimer ou alguma outra funcionalidade. Dessa forma, primeiro, o postback para o servidor é emitido antes que o controle seja desabilitado pela function JavaScript. Não testei isso, mas poderia funcionar

    function UpdateClick (btn) {

      for (i = 0; i < Page_Validators.length; i++) { ValidatorValidate(Page_Validators[i]); if (Page_Validators[i].isvalid == false) return false; } btn.disabled = 'false'; btn.value = 'Please Wait...'; return true; }