Domanda

Ho un controllo GridView in un'applicazione Asp.net, che ha un <asp:buttonField> di type="image" e CommandName="Delete".

Esiste un modo per eseguire un pezzo di javascript prima di raggiungere l'evento OnRowDelete?

Voglio solo una semplice conferma prima di eliminare la riga.

Grazie!

MODIFICA : tieni presente che <asp:ButtonField> il tag non ha un OnClientClick attributo.

È stato utile?

Soluzione

Vorrei invece usare TemplateField e popolare l'oggetto ItemTemplate con un asp: Button o asp: ImageButton, a seconda di ciò che è necessario. È quindi possibile eseguire la stessa logica che avrebbe fatto l'evento RowCommand quando ha intercettato il comando Elimina.

Su uno di quei pulsanti utilizzerei quindi la proprietà OnClientClick per eseguire prima la finestra di dialogo di conferma JavaScript.

<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>

Altri suggerimenti

Ho scoperto che il modo più elegante per farlo è usare jQuery per collegare l'evento onClick:

<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" />

Nota che utilizzo una classe CSS arbitraria per identificare il pulsante di collegamento.

Nel GridView gestore di eventi RowCreated, usa FindControl per trovare il pulsante con nome e aggiungi alla raccolta Attributi:

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

Il tuo codice ASP.Net verrà eseguito solo se confirm () è vero, ovvero se è stato ok.

Quindi ho una funzione 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";
  }
}

e lo collego a un elemento della griglia in questo modo:

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

Questo è un vecchio codice, quindi vedo alcune cose che potrei cambiare, ma la morale è questa: se tutto il resto fallisce, aggiungi il javascript " onClick " durante l'associazione delle file. quot &; & document.all.answer.value quot; è un campo nascosto che ha runat=server in modo che io possa leggere il valore al postback.

meglio per te l'aggiunta di riferimento System.Windows.Forms se usi buttonfield ... È sempre disponibile in tutto il framework .net e supporta asp.net ..

questa è la tua scelta se il buttonfield è la tua scelta migliore .. esempio:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top