OnClick no se ejecuta despues del OnClientClick

publicado por: Anonymous

Tengo un formulario con un botón, cuando piso el botón (este botón en realidad lo uso para varias cosas cambiandole el nombre y usando flags en el método que define el click) este ejecuta el JavaScript en el cliente pero nunca llega al code-behind ni en el Page_Load ni en el evento del Click, sin embargo el JavaScript si se ejecuta.

Mi botón:

<asp:Button runat="server" ID="btnCierre" Text="Iniciar Cierre" Style="width: 150px" Enabled="false" OnClick="btnCierre_Click" OnClientClick="return StartCierre();" UseSubmitBehavior="true" />

Mi JS:

    <script type="text/javascript">
    function StartCierre() {
        if (document.getElementById("<%= btnCierre.ClientID %>").value == "Aceptar") {
            document.getElementById("<%= AnimacionDeCarga.ClientID %>").style.visibility = 'visible';
            document.getElementById("<%= btnDownSistema.ClientID %>").disabled = true;
            document.getElementById("<%= btnCierre.ClientID %>").disabled = true;
            document.getElementById("<%= btnCancel.ClientID %>").disabled = true;
        }
        return true;
    }
</script>

Todo el JS se ejecuta incluso el retorno del true pero en el code-behind puedo poner breakpoints en todo el código y nunca llega a ninguno.

Cuando uso el botón para otras cosas si funciona.

solución

Cuando ejecutas la funcion javascript, desactivas el buton lo que previene que se ejecute el evento del servidor:

function StartCierre() {
        if (document.getElementById("<%= btnCierre.ClientID %>").value == "Aceptar") {
            //...
            document.getElementById("<%= btnCierre.ClientID %>").disabled = true;
          //...
        }
        return true;
    }

Tienes que dejar el buton activo para que el evento se pueda ejecutar:

    <script type="text/javascript">
    function StartCierre() {
        if (document.getElementById("<%= btnCierre.ClientID %>").value == "Aceptar") {
            document.getElementById("<%= AnimacionDeCarga.ClientID %>").style.visibility = 'visible';
            document.getElementById("<%= btnDownSistema.ClientID %>").disabled = true;
            document.getElementById("<%= btnCancel.ClientID %>").disabled = true;
        }
        return true;
    }
</script>

Pero si necesitas desactivarlo, cuando se ejecute el evento del servidor, desactivas el boton:

private void btnCierre_Click(object sender, EventArgs e)
{
   //...
   //...
  btnCierre.Enabled = false;
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *