none
Return siempre es true en un UpdatePanel RRS feed

  • Pregunta

  • Hola amigos, mi duda es la siguiente.

    Tengo el siguiente codigo javascript :

            function Confirmar() {
                var borrar = confirm('Desea eliminar el centro de costo?');
                if (borrar) {
                    return false;
                }
                else {
                    return true;
                }
              }
    

    y en mi html un Updatepanel y dentro un Gridview con lo siguiente :

        <asp:UpdatePanel ID="upCostos" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
    .
    .
    .
    <Columns >
    <asp:TemplateField >
                          <ItemTemplate>
                               <asp:LinkButton ID="cmdEliminar" runat="server" CommandName="Delete" ToolTip="Eliminar" 
                                   OnClientClick="return Confirmar();" ForeColor="#cc0000">
                                   <i class="fa fa-trash-o fa-lg"></i></asp:LinkButton>
                               </ItemTemplate>
                          <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                    </asp:TemplateField>
    

    El asunto es que siempre que hago click en cmdEliminar este se se ejecuta, por mas que en el mensaje java haga click en "Cancelar".

    Saben como puedo evitar esto? es decir, que solo se ejecute el codebehind si efectivamente he respondido al botón "Aceptar"

    Saludos.

    miércoles, 9 de marzo de 2016 14:11

Respuestas

  • Prueba a modifcar así tu codigo JS

    function Confirmar(event) {
    	var borrar = confirm('Desea eliminar el centro de costo?');
    	if (borrar) {
    		event.preventDefault();
    		return false;
    	}
    	else {
    		return true;
    	}
    }

    y en tu LinkButton

    <asp:LinkButton ID="cmdEliminar" runat="server"
    		    CommandName="Delete" ToolTip="Eliminar" 
                        OnClientClick="return Confirmar(event);" 
    	            ForeColor="#cc0000"
    		    OnClick="cmdEliminar_Click" > 
    	<i class="fa fa-trash-o fa-lg"></i>
    </asp:LinkButton>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 10 de marzo de 2016 16:03
    Moderador

Todas las respuestas

  • Hoa,

    debes definir en tu LinkButton al menos un Atributo OnCommand o un OnClick ya que estos son los que se ejecutan desde el lado servidor

    Tu LinkButton quedaría

    <asp:LinkButton ID="cmdEliminar" runat="server"
    		    CommandName="Delete" ToolTip="Eliminar" 
                        OnClientClick="return Confirmar();" 
    	            ForeColor="#cc0000"
    		    OnCommand="cmdEliminar_Command" > 
    	<i class="fa fa-trash-o fa-lg"></i>
    </asp:LinkButton>

    y en tu codebehind

    void cmdEliminar_Command(Object sender, CommandEventArgs e) 
    {
      // tu proceso
    }
    Lo mismo harías par OnClick


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 10 de marzo de 2016 8:50
    Moderador
  • <asp:LinkButton ID="cmdEliminar" runat="server"
    		    CommandName="Delete" ToolTip="Eliminar" 
                        OnClientClick="return Confirmar();" 
    	            ForeColor="#cc0000"
    		    OnClick="cmdEliminar_Click" > 
    	<i class="fa fa-trash-o fa-lg"></i>
    </asp:LinkButton>

    void cmdEliminar_Click(Object sender, CommandEventArgs e) 
    {
      // tu proceso
    }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 10 de marzo de 2016 8:51
    Moderador
  • Hola Sergio, gracias por responder.

    Lo que indicas funciona, y deberia marcarlo como solución, pero olvide indicar que aparte del botón eliminar he hecho lo siguiente :

    en el codebehind :

        Private Sub gvCostos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles gvCostos.RowDataBound
            If e.Row.RowType = DataControlRowType.DataRow Then
                e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor = '#E8E8E8';this.style.cursor='pointer'")
                e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor = 'white';")
                e.Row.Attributes("onclick") = ClientScript.GetPostBackClientHyperlink(Me.gvCostos, "Select$" + e.Row.RowIndex.ToString)
            End If
        End Sub
    

    por lo que al pasar el cursor por las filas estas se van iluminando, pero al hacer click en el botón eliminar y luego hacer click en "cancelar" (del javascript) ya no se ejecuta cmdEliminar_Click (lo cual es correcto), pero se termina ejecuta lo siguiente:

        Protected Sub gvCostos_SelectedIndexChanged(sender As Object, e As EventArgs) Handles gvCostos.SelectedIndexChanged
            Dim dtCosto As New DataTable
            Dim pkRegistro As Integer = Me.gvCostos.SelectedValue
            Me.hfId.Value = pkRegistro
    .
    .
    .

    Alguna forma de impedir que esto se ejecute con el botón "eliminar", es decir, si se debe ejecutar al hacer click en cualquier parte de la fila, menos en el botón "eliiminar"

    Saludos.


    jueves, 10 de marzo de 2016 15:00
  • Prueba a modifcar así tu codigo JS

    function Confirmar(event) {
    	var borrar = confirm('Desea eliminar el centro de costo?');
    	if (borrar) {
    		event.preventDefault();
    		return false;
    	}
    	else {
    		return true;
    	}
    }

    y en tu LinkButton

    <asp:LinkButton ID="cmdEliminar" runat="server"
    		    CommandName="Delete" ToolTip="Eliminar" 
                        OnClientClick="return Confirmar(event);" 
    	            ForeColor="#cc0000"
    		    OnClick="cmdEliminar_Click" > 
    	<i class="fa fa-trash-o fa-lg"></i>
    </asp:LinkButton>


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    jueves, 10 de marzo de 2016 16:03
    Moderador
  • Nada Sergio, aun poniendo dichas sentencias al momento de hacer click en "cancelar" el flujo pasa al codebehing y ejecuta SelectedIndexChanged.

    Voy a seguir investigando a ver que es lo que puedo hacer.

    Gracias.

    jueves, 10 de marzo de 2016 17:08