Question

J'ai un GridView contrôle dans une application Asp.net, qui a <asp:buttonField> des type="image" et CommandName="Delete".

Existe-t-il un moyen d'exécuter une partie de javascript avant d'atteindre l'événement OnRowDelete?

Je veux juste une simple confirmation avant de supprimer la ligne.

Merci!

MODIFIER : notez que <asp:ButtonField> la balise n'a pas d'attribut OnClientClick.

Était-ce utile?

La solution

J'utiliserais plutôt un TemplateField et remplirais le ItemTemplate avec un asp: Button ou un asp: ImageButton normal, en fonction des besoins. Vous pouvez ensuite exécuter la même logique que celle que l’événement RowCommand allait effectuer lorsqu’il a intercepté la commande Delete.

Sur l'un de ces boutons, j'utiliserais ensuite la propriété OnClientClick pour exécuter la boîte de dialogue de confirmation JavaScript avant cela.

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

Autres conseils

J'ai découvert que la méthode la plus élégante consiste à utiliser jQuery pour câbler l'événement 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" />

Notez que j'utilise une classe CSS arbitraire pour identifier le bouton de lien.

Dans le gestionnaire d'événements GridView RowCreated, utilisez FindControl pour rechercher le bouton nommé et ajoutez-le à la collection Attributes:

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

Votre code ASP.Net ne sera exécuté que si confirm () est vrai, c’est-à-dire que tout va bien.

J'ai donc une fonction 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";
  }
}

et je le relie à un élément de la grille comme suit:

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

Ceci est un vieux code, je vois donc quelques choses que je pourrais changer, mais la morale est la suivante: si tout échoue, ajoutez le javascript & "onClick &"; lors de la liaison de la ligne. " document.all.answer.value " est un champ caché qui a runat=server afin que je puisse lire la valeur lors de la publication.

mieux pour vous l'ajout de référence System.Windows.Forms si vous utilisez buttonfield ... Il est toujours disponible dans tout le framework .net et supporte asp.net.

C’est votre choix si le champ de boutons est votre meilleur choix. échantillon:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top