2008-10-20 11 views
25

Ich habe eine GridView Kontrolle in einer Asp.net-Anwendung, die eine <asp:buttonField>type="image" und CommandName="Delete" hat.Javascript vor Asp: ButtonField klicken

Gibt es eine Möglichkeit, ein Stück JavaScript vor dem Erreichen des OnRowDelete Ereignisses auszuführen?

Ich möchte nur eine einfache Bestätigung vor dem Löschen der Zeile.

Danke!

EDIT: Bitte beachten Sie, dass <asp:ButtonField> Tag nicht ein OnClientClick Attribut hat.

+0

ich es geschafft, aus dem Button, und fügen sie das OnClientClick Attribut, um es zu erben. aber aus irgendeinem Grund tut es das tatsächliche Löschen nicht. –

Antwort

23

Ich würde stattdessen ein TemplateField verwenden und das ItemTemplate mit einem regulären Asp füllen: Button oder asp: ImageButton, je nachdem, was benötigt wird. Sie können dann dieselbe Logik ausführen, die das RowCommand-Ereignis beim Abfangen des Löschbefehls ausführen würde.

Auf jeder dieser Schaltflächen würde ich dann die OnClientClick-Eigenschaft verwenden, um den JavaScript-Bestätigungsdialog vorher auszuführen.

<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

Beispielcode bitte? –

+4

Zufällig habe ich eine Probe von einem Projekt, das ich gerade geöffnet habe. – tvanfosson

+0

Entschuldigung, ich hätte einen Beispielcode zur Verfügung stellen sollen. Danke an tvanfosson für die Bereitstellung/Bearbeitung meiner Antwort. –

0

So habe ich eine Javascript-Funktion:

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

und ich es zu einem Rasterelement verdrahten etwa so:

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 

Dieser einige alte Code ist, so sehe ich ein paar Dinge, die ich ändern könnte, aber die Moral ist dies: Wenn alles andere fehlschlägt, fügen Sie das Javascript "onClick" während der Zeilenbindung hinzu. "document.all.answer.value" ist ein verstecktes Feld, das runat=server hat, damit ich den Wert beim Postback lesen kann.

2

In der GridView ‚s RowCreated Ereignishandler verwenden FindControl die genannte Taste zu finden, und auf die Attribute Sammlung:

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

wird Ihr ASP.Net Code nur dann ausgeführt werden, wenn confirm() wahr ist , dh wurde ok'd.

+2

das funktioniert nur, wenn ButtonType auf Button gesetzt ist –

14

fand ich, dass der eleganteste Weg, dies zu tun, ist jQuery zu verwenden, um das OnClick-Ereignis zu verdrahten:

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

Beachten Sie, dass ich eine beliebige CSS-Klasse verwenden, um die Link-Taste zu identifizieren.

-2

besser für Sie Verweis hinzufügen System.Windows.Forms, wenn Sie verwenden Button ... Es ist in allen .NET Framework immer verfügbar und asp.net unterstützt ..

diese Wahl ist, wenn der Button ist Ihre beste Wahl .. Beispiel:

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