2008-10-20 48 views
25

Tengo un control GridView en una aplicación Asp.net, que tiene un <asp:buttonField> de type="image" y CommandName="Delete".Javascript before asp: ButtonField click

¿Hay alguna forma de ejecutar un javascript antes de llegar al evento OnRowDelete?

Quiero simplemente una confirmación simple antes de eliminar la fila.

Gracias!

EDITAR: por favor que la etiqueta de <asp:ButtonField>no tiene un atributoOnClientClick.

+0

i se logró heredar del ButtonField, y añadir el atributo OnClientClick a ella. pero que por alguna razón no hace la eliminación real. –

Respuesta

23

Utilizaría un TemplateField en su lugar, y llenaría el ItemTemplate con un asp: Button o asp: ImageButton, dependiendo de uno que sea necesario. Luego puede ejecutar la misma lógica que el evento RowCommand cuando intercepta el comando Eliminar.

En cualquiera de esos botones usaría la propiedad OnClientClick para ejecutar el diálogo de confirmación de JavaScript antes de esto.

<script type="text/javascript"> 
    function confirmDelete() 
    { 
     return confirm("Are you sure you want to delete this?"); 
    } 
</script> 

... 

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:ImageButton ID="DeleteButton" runat="server" 
     ImageUrl="..." AlternateText="Delete" ToolTip="Delete" 
     CommandName="Delete" CommandArgument='<%# Eval("ID") %>' 
     OnClientClick="return confirmDelete();" /> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

código de muestra por favor? –

+4

Acabo de tener una muestra de un proyecto que tengo abierto en este momento. – tvanfosson

+0

Lo siento, debería haber proporcionado algún código de muestra. Gracias a tvanfosson por proporcionarlo/editar mi respuesta. –

0

Así que tienen una función javascript:

function confirmDeleteContact() { 
    if (confirm("Are you sure you want to delete this contact?")) { 
    document.all.answer.value="yes"; 
    } else { 
    document.all.answer.value="no"; 
    } 
} 

y unirlo a un elemento de la cuadrícula de esta manera:

Sub dgbind(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles dgcontacts.ItemDataBound 
    Select Case e.Item.ItemType 
     Case ListItemType.Item, ListItemType.AlternatingItem 
      CType(e.Item.Cells(9).Controls(0), System.Web.UI.WebControls.LinkButton).Attributes.Add("onclick", "javascript:confirmDeleteContact();") 
    End Select 
End Sub 

Este es un código de edad, por lo que ver a unos pocos cosas que podría cambiar, pero la moraleja es esta: si todo lo demás falla, agregue el javascript "onClick" durante el enlace de la fila. "document.all.answer.value" es un campo oculto que tiene runat=server para que pueda leer el valor en la devolución.

2

En caso de que el controlador de RowCreatedGridView 's, utilice FindControl para encontrar el botón de llamada, y añadir a la colección de atributos:

btn.Attributes.Add("onclick", "return confirm('delete this record?');"); 

Su código de ASP.Net sólo se ejecuta si confirman() es verdadera , es decir, ha sido aprobado.

+2

esto solo funciona si tiene ButtonType configurado en Button –

14

He encontrado que la manera más elegante de hacer esto es utilizar jQuery para conectar el evento de clic:

<script type="text/javascript"> 
    $(".deleteLink").click(function() { 
     return confirm('Are you sure you wish to delete this record?'); 
    }); 
</script> 

... 

<asp:ButtonField ButtonType="Link" Text="Delete" 
    CommandName="Delete" ItemStyle-CssClass="deleteLink" /> 

en cuenta que yo uso una clase CSS arbitrario para identificar el botón de enlace.

-2

mejor para que los System.Windows.Forms Agregar referencia si utiliza ButtonField ... Siempre está disponible en toda .NET Framework y es compatible con asp.net ..

esta es su elección si el ButtonField es su mejor opción .. muestra:

using System.Windows.Forms; 

protected void BorrowItem_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 

    if (e.CommandName == "Delete") 
    { 

     if (System.Windows.Forms.MessageBox.Show("Do you want to delete", "Delete",MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) != System.Windows.Forms.DialogResult.OK) 
     { 
      return; 
     } 
    } 
//Continue execution... 
} 

//drimaster 
Cuestiones relacionadas