25 Stimmen

Javascript vor asp:ButtonField Klick

Ich habe eine GridView Steuerelement in einer Asp.net-Anwendung, die eine <asp:buttonField> von type="image" y CommandName="Delete" .

Gibt es eine Möglichkeit, ein Stück Javascript auszuführen, bevor es die OnRowDelete Veranstaltung?

Ich möchte nur eine einfache Bestätigung, bevor ich die Zeile lösche.

Danke!

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

0 Stimmen

Ich konnte von der ButtonField erben, und fügen Sie das OnClientClick-Attribut zu ihm. aber als aus irgendeinem Grund tut es nicht die tatsächliche löschen.

23voto

steve_c Punkte 6051

Ich würde stattdessen ein TemplateField verwenden und das ItemTemplate mit einem regulären asp:Button oder asp:ImageButton befüllen, je nachdem, was benötigt wird. Sie können dann die gleiche Logik ausführen, die das RowCommand-Ereignis tun würde, wenn es den Löschbefehl abfängt.

Für jede dieser Schaltflächen würde ich dann die Eigenschaft OnClientClick verwenden, um den JavaScript-Bestätigungsdialog auszuführen, der dem vorausgeht.

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

15voto

Tod Birdsall Punkte 15830

Ich habe herausgefunden, 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 verwende, um den Link-Button zu identifizieren.

3voto

devio Punkte 36064

In der GridView 's RowCreated Ereignisbehandler, verwenden Sie FindControl um die benannte Schaltfläche zu finden, und fügen Sie sie der Attributsammlung hinzu:

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

Ihr ASP.Net-Code wird nur ausgeführt, wenn confirm() wahr ist, d.h. wenn er genehmigt wurde.

0voto

nathaniel Punkte 1135

Ich habe also 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 verdrahte es mit einem Gitterelement wie folgt:

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

Das ist ein alter Code, und ich sehe ein paar Dinge, die ich ändern könnte, aber die Moral ist folgende: 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 so dass ich den Wert beim Postback lesen kann.

-2voto

user1308314 Punkte 31

Besser für Sie die Referenz System.Windows.Forms hinzufügen, wenn Sie buttonfield verwenden... Es ist immer in allen .net Frameworks verfügbar und unterstützt asp.net...

Dies ist Ihre Wahl, wenn das Tastenfeld Ihre beste Wahl ist Muster:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X