2009-07-16 30 views
2

Hallo Ich habe einen einfachen Code, um Daten in db in Button Click Event einzufügen. Es führt fein aus und fügt Daten in db ein. Nach dem Einfügen von Daten, wenn ich die Taste f5 drücke, fügt es erneut eine neue Zeile mit denselben Werten in db ein.btnAdd_Click wird ausgelöst, wenn ich F5 drücke

Schaltfläche klicken Ereignis ausgelöst wird auf jeder f5 Taste (Refresh)

Wat ist das Problem?

Danke, Nagu

Antwort

2

so entworfen Dies wird. Wenn Sie F5 drücken, wiederholen Sie, was Sie gerade getan haben, was ein Postback war. Um dies zu verhindern, haben Sie eine endlose Menge von Lösungen wie:

Verwenden Sie eine Sitzungsvariable beim ersten Laden und sobald es das erste Mal gebucht (gespeichert), löschen Sie den Wert. Stellen Sie sicher, dass Sie nach dem Vorhandensein dieses Werts suchen.

// On inital page load for data entry store a key. 
// This is a basic example, you should have a session wrapper 
Session["Unsaved"] = 1; 

// When you do the save logic make sure you check this session variable and save if 
// it still exists. 
if (Session["Unsaved"] != null) 
{ 
    // Save data here 
    Session.Remove("Unsaved"); 
} 
else 
{ 
    // Show message that save has already completed or session has expired. 
} 

Sie können auch die Kontroll DB Seite tun und stellen Sie sicher, dass Sie nicht identische Daten einfügen (was, wie es in Ihrem Szenario gültig sein könnte möglicherweise nicht funktionieren)

In der Vergangenheit habe ich verhindert habe dies mit B. indem Sie eine Revisionsnummer speichern und die Revisionsnummer mit den geposteten Daten übermitteln. Wenn die Revisionsnummern beim Speichern nicht übereinstimmen (da sie mit jeder Aktualisierung geändert werden und die Überprüfung auf der DB-Seite erfolgt), schlägt die Aktualisierung fehl und ich würde eine Nachricht anzeigen.

Für neue Daten können Sie auch eine Response.Redirect auf eine "vollständige" Seite ausführen, die ihnen aktualisierte Informationen über Erfolg/Misserfolg liefert. Wenn sie auf "Aktualisieren" klicken, wird nur die fertige Seite neu geladen und nicht die Seite, die das Einfügen/Aktualisieren durchgeführt hat.

Auch hier gibt es so viele verschiedene Lösungen. Nichts ist perfekt für jedes Szenario, so dass Sie herausfinden müssen, welche für Sie am besten funktioniert.

+0

Hallo vielen Dank für Ihre schnelle Antwort, und dies ist die einzige Lösung, um dieses Problem zu umgehen? oder gibt es einen besseren Ansatz? – Nagu

+0

F5 ist ein Browserbefehl, der den Browser anweist, die Seite zu aktualisieren. In diesem Fall müssen Sie Ihr Postback erneut einreichen. Wenn Sie dieses Verhalten überschreiben, werden Sie die von den Benutzern erwartete Standard-Browserfunktionalität nicht einhalten. Dies ist ein großes No-No in der UI-Design-Welt. –

1

Sie können den Webbrowser nach dem Postback umleiten. Dies wird dazu führen, dass das Drücken der Refresh-Taste oder F5 stattdessen zum Laden der neuen Seite führt.

Beispiel:

protected void button_Click(object sender, EventArgs args) 
{ 
    // Insert data, etc. 

    Response.AddHeader("Location", "DifferentPage.aspx"); 
} 
+0

oder Response.Redirect zurück auf die gleiche Seite. Wenn Sie F5 drücken, wird die Seite erneut abgerufen und das Postback wird nicht erneut gesendet. – russau

+0

Umleiten auf die gleiche Seite wird in der Regel nicht erlauben Sie eine Art von Bestätigung/Nachricht von Erfolg oder Misserfolg ohne spezielle Codierung nach etwas zu suchen, so in der Regel eine neue Seite verwendet wird, um diese Funktionalität getrennt zu halten. – Kelsey

Verwandte Themen