2008-10-20 9 views
25

J'ai un contrôle GridView dans une application Asp.net, qui a un <asp:buttonField> de et CommandName="Delete".Javascript avant asp: ButtonField cliquez sur

Est-il possible d'exécuter un morceau de javascript avant d'atteindre l'événement OnRowDelete?

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

Merci!

EDIT: S'il vous plaît noter que <asp:ButtonField> tag ne pas un attribut OnClientClick.

+0

i a réussi à hériter de la ButtonField, et ajoutez l'attribut OnClientClick à lui. mais que pour une raison quelconque, il ne fait pas la suppression réelle. –

Répondre

23

Je voudrais utiliser un TemplateField à la place, et remplir le ItemTemplate avec un asp: Button ou un asp: ImageButton, en fonction de ce qui est nécessaire. Vous pouvez ensuite exécuter la même logique que l'événement RowCommand allait faire quand il a intercepté la commande Delete.

Sur l'un de ces boutons, j'utiliserais alors 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> 
+0

exemple de code s'il vous plaît? –

+4

Juste arrivé à avoir un échantillon d'un projet que j'ai ouvert en ce moment. – tvanfosson

+0

Désolé, j'aurais dû fournir un exemple de code. Merci à tvanfosson de l'avoir fourni/éditer ma réponse. –

0

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 câbler à un élément de grille comme ceci:

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 

C'est un code vieux, donc je vois quelques choses que je pourrais changer, mais la morale est la suivante: Si tout le reste échoue, ajouter 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 après la publication.

2

Dans le gestionnaire d'événements de RowCreatedGridView, utilisez FindControl pour trouver le bouton nommé, et ajouter à la collection Attributs:

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

Votre code ASP.Net ne sera exécutée que si confirm() est vrai , c'est à dire a été ok'd.

+2

cela ne fonctionne que si ButtonType est défini sur Button –

14

J'ai trouvé que la façon la plus élégante de le faire est d'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.

-2

mieux pour vous les System.Windows.Forms de référence ajouter si vous utilisez ButtonField ... Il est toujours disponible dans tout cadre de .net et soutient asp.net ..

c'est votre choix si le ButtonField 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 
Questions connexes