Passing-Werte und Werte vorübergehend zu speichern, ... Gebrauch Sitzung, verstecktes Feld, Query-String oder andere?

StackOverflow https://stackoverflow.com/questions/4224319

Frage

Dies kann eine grundlegende Frage sein ... Allerdings habe ich nur eine Lösung gepflückt ohne Angabe von viel obwohl es ...

Betrachten wir eine Seite mit einem Raster von Formen: /FormList.aspx

Dabei gilt zu bearbeiten Auswahl eine Form leitet den Benutzer auf einer Seite wie: /FormEdit.aspx?Id=2

Ich bin in der Regel in Ordnung mit den Werten in dem Query-String vorbei, weil ich in dem Code-behind von FormEdit prüfen, ob die Id gültig ist. Welches ist die bester Weg, um den Wert zu übergeben , aber: Sitzung oder Query-String ? Oder andere?

Während der Benutzer das Formular bearbeitet ... ich in der Regel speichern Sie die Id vorübergehend in der Sitzung (zu vermeiden, ist es aus der URL immer wieder). Während die Form Ausgabe des Benutzers, was ist der beste Weg, um den Wert zu speichern ? In der Sitzung oder in einem versteckten Feld ? Oder andere? (Wenn ich eine temporäre Datentabelle gespeichert werden soll, ich glaube, ich nur die Session verwenden kann, aber wenn es ein Integer-Wert ...)

Vielen Dank im Voraus für Ihre Anregungen:)

War es hilfreich?

Lösung

Ich würde vorschlagen, nicht Session für etwas zu verwenden, die einfach und schnell gespeichert und in einer Abfragezeichenfolge oder verstecktes Formularfeld überprüft werden; Informationen, die Sie scheinen über hier ist perfekt für den Query-String zu sprechen.

Beachten Sie, dass Session Fehler, wenn jemand versucht, zu bearbeiten mehrere Formulare auf einmal in verschiedenen Tabs einführen könnte. Wenn sie einen speichern, genommen der Session Wert aus dem letzten sein würde, sie zu sparen geladen bis zu ... wahrscheinlich nicht das, was Sie wollen, und es wäre wahrscheinlich schwierig sein, diese herauszufinden.

Was sollten Sie bestehen tun wird, um die formid in den Query-String / Formularfelder und einfach doppelt überprüfen Sie es für geistige Gesundheit, wenn sie die einreichen speichern; Stellen Sie sicher, es ist eine ID, die vorhanden ist und dass sie berechtigt sind, zu bearbeiten, zum Beispiel.

Andere Tipps

Normalerweise Abfrage-Zeichenfolge ist eine gute Wahl, wenn Sie sehr kleine Daten zu trasfer zwischen Ihren Seiten haben.

2- Session würde eine große, wenn Sie zum Speichern von benutzerspezifischen Daten werden soll.

in Ihnen Fall, am besten wäre es, die Abfragezeichenfolgeflag wie Sie sehr kleine Daten senden (ID) auf der nächsten Seite.

Ein paar Dinge zu beachten:

  1. Wenn Manipulation des Wertes ist ein Sicherheitsrisiko Sie speichert es auf der Serverseite entweder benötigen oder den Wert Client-Seite sichern (was nicht einfach ist korrekt zu bekommen). Oder noch besser:. Recalulate sie
  2. in der Sitzung zu speichern kann leicht zu Problemen führen, wenn der Benutzer die Webseite öffnet in mehreren Registerkarten zur gleichen Zeit hat. Es kann auch die Zurück-Taste brechen.
    Wenn Sie zum Beispiel der ID des Elements sicher der Benutzer gerade in der Sitzung bearbeiten, und der Benutzer bearbeitet zwei Einträge gleichzeitig der Inhalt des einen er die Bearbeitung begann zuerst in den Eintrag geschrieben werden könnte er später begann die Bearbeitung.

Mein Vorschlag ist, den Wert in einer Sitzungsvariablen zu halten, aber wenn Sie die page_load von FormEdit.aspx für erstes Mal ausführen, speichert den Wert in der Viewstate auf der Seite, und deaktivieren Sie die Sitzung var.

So etwas (in page_load von FormEdit.aspx):

if (!IsPostBack)
{
    ViewState["MyVar"] = Session["MyVar"];
    Session.Remove("MyVar");
}

Das Problem mit ASP.NET und Abfrage-Strings ist, dass sie auf Postbacks bestehen bleiben. Das heißt, die Form-Aktion für alle Seite standardmäßig die URL einschließlich der Abfrage-String , die verwendet wurde, es zu laden.

Wenn die ID in Frage nur verwendet, um eine bestimmte Form zu wählen (und nicht auf Benutzerdaten im Zusammenhang) ist dies keine große Sache, in der Tat ist es wahrscheinlich, was Sie wollen.

Auf der anderen Seite, wenn es einen Datensatz identifiziert, können Sie dies nicht wünschen. Angenommen, Sie Code Dinge richtig, sollte dies ein Sicherheitsrisiko nicht vorhanden, aber es kann der Benutzer den Eindruck erwecken, dass es einen durch die interne ID eines Datensatzes in der Abfragezeichenfolge auszusetzen. Es ist auch nur sieht unglücklich.

Es gibt Möglichkeiten zu arbeiten, um dieses, und ich denke, in 3,5 Sie programmatisch das Formular Aktion ändern können. (Früher war es Sie Javascript verwenden zu tun hatte, dass - obwohl die Form Aktion ausgesetzt war es konnte nicht geändert werden).

Der beste Weg, damit umzugehen, ist zu vermeiden Abfrage-Strings für alle Datensatzkennungen. Verwendung POSTs zum Last Datensätze statt, z.B. anstelle der Verwendung einen asp: HyperLink-Steuerelement, verwenden Sie einen asp: Linkbutton-Steuerelement.

Natürlich, da BEITRäGE die gleiche Seite laden sie von Quellen bezogen werden, erfordert dies, dass Ihre Formulare als Liste auf der gleichen Seite sein. Anstatt also mit zwei getrennten Seiten, FormList.aspx und FormEdit.aspx, einfach den Code auf der gleichen Seite, so dass Sie direkt nach zurück können. Vermutlich ist jedes Ihrer Formulare in einem Usercontrol sowieso. So Ihre Haupt-Seite nur die Aufgabe, die Wahl hat, die alles andere zeigen Usercontrol, wird an die Benutzersteuerungen übertragen, und alle Parameter übergeben kann durch Beiträge in Ihrem Haupt-Seite durchgeführt werden. Dies ist eine bessere Architektur und hält alles schön und sauber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top