Löschen von ASP.NET Repeater Artikel - fehlerhafte löschen...?

Habe ich einen repeater, die bindet einen Satz von Daten. Innerhalb dieser repeater ist eine Spalte mit verschiedenen Steuerelementen für die Aktualisierung, das löschen, etc. Dies sind die Bild-Tasten, die Feuer ein onclick-Ereignis wie "DeleteRecord". Alle diese tut, ist Feuer eine gespeicherte Prozedur auf und übergibt die ID des Datensatzes zu löschen von der CommandArgument des Objekts.

Dieses funktioniert wunderbar... bis auf ein ziemlich großes problem. Sobald Sie einen Datensatz löschen, wenn Sie die Seite aktualisieren, wird der Datensatz, in dem die ersten gelöschten Datensatz verwendet werden, gelöscht wird.

Zum Beispiel... wenn ich 4 Datensätze

1 Record1 
2 Record2 
3 Record3 
4 Record4 

und ich lösche Datensatz 2... Die Seite wird neu geladen (die ist gut):

1 Record1 
3 Record3 
4 Record4 

...wenn ich dann auf aktualisieren...

1 Record1 
4 Record4 

Ich nehme an, dies ist, weil die fälschlicherweise gelöschte Objekt (record3) ist jetzt in der gleichen hierarchischen Stelle wie die alte-Objekt verwendet werden, und .net also weiß nicht der Unterschied, die Seite wird aktualisiert und feuert die onlick-event, packte den Befehl argument, die neues Objekt und löscht basierend auf der ID erhalten Sie aus der commandargument des neuen Objekts.

Dies ist natürlich ein riesiges problem, wenn ein client hast, dies würde es zerstören, Daten irrtümlich und ich bin ratlos hier.

Gibt es eine Möglichkeit, um dies zu verhindern? Ich bin mir nicht sicher, ob es einen besseren Weg, Dinge zu tun oder nicht. Wenn es nicht ist, ich brauche irgendeine Art und Weise zu sagen, die Seite nicht zur Ausführung der Veranstaltung oder auf cross-Referenz die ID des Objekts, das ist soll für die Löschung gegen das Objekt selbst...

Code unten für die Bequemlichkeit...

BEARBEITEN Wickelte einen LinkButton um ihn herum, weil ich einige jquery-code hier auch die Haltestellen der Seite der Ausführung zu warten, für die Bestätigung des Benutzers. Drücken von "ok" fährt der Seite der Ausführung.

<asp:LinkButton ID="oDeleteLink" CssClass="oDeleteIcon" CommandName="Delete" CommandArgument='<%# Eval("iAccountID") %>' runat="server">
     <asp:ImageButton ImageUrl="/files/system/icons/trash-steel-16.png" ToolTip="Delete This Account" AlternateText="Delete" ID="oDeleteIcon" runat="server" />
</asp:LinkButton>

    protected void oAccounts_ItemCommand(Object Sender, RepeaterCommandEventArgs e) {
        if (e.CommandName == "Delete") {
            int ID = e.CommandArgument.ToString().Numeric();
            db.SPs.SpDeleteAccount(ID).Execute();
            UI.Confirm(uiBroadcast, "Account has been deleted", "300px");
            BindAccounts();
        }
    }

Würde schätzen jedes feedback Euch Leute geben konnte.

  • Vielen Dank für die Bearbeitung, Oded.
  • Ich habe versucht Adam, die Lösung, und es tut die gleiche Sache. Ich sollte jedoch darauf hingewiesen werden, dass musste ich etwas improvisieren, aber es sollte nicht machen einen Unterschied in der Ausführung von code. Ich werde aktualisieren Sie den code oben entsprechend der neuen situation.
InformationsquelleAutor Mark | 2010-09-27
Schreibe einen Kommentar