Ich verwende die AcceptVerbs
in Scott Gu's Preview 5-Blogbeitrag beschriebene Methode für den Umgang mit Formulareinträgen in ASP.NET MVC:
- Der Benutzer erhält über GET ein leeres Formular
- Der Benutzer sendet das ausgefüllte Formular per POST an dieselbe Aktion
- Die Aktion überprüft Daten, ergreift die entsprechenden Maßnahmen und leitet zu einer neuen Ansicht weiter
Also muss ich nicht benutzen TempData
. Das heißt, ich muss jetzt einen "Bestätigungs" -Schritt zu diesem Prozess hinzufügen, und es scheint die Verwendung von zu erfordern TempData
.
Aus irgendeinem Grund habe ich eine Abneigung gegen die Verwendung TempData
- dass es etwas ist, um das herum entworfen werden muss.
Ist das überhaupt ein berechtigtes Anliegen oder mache ich es wieder gut?
asp.net-mvc
tempdata
anonym
quelle
quelle
Antworten:
Ich stelle mir temporäre Daten als einen Feuer-und-Vergessen-Mechanismus zur Benachrichtigung des Benutzers vor. Es ist großartig, sie an etwas zu erinnern, das sie kürzlich getan haben, aber ich würde auch zögern, es zu einem erforderlichen Schritt in einem Benutzerprozess zu machen. Der Grund dafür ist, dass die Seite, wenn sie aktualisiert wird, meiner Meinung nach nicht mehr vorhanden ist. Nun, ich denke, ich zögere auch, es zu verwenden, da es nicht wirklich genau definiert ist, wie zuverlässig es ist.
Ich frage mich, ob das Problem darin besteht, dass die Aktion vor dem Bestätigungsschritt auf eine andere Seite umgeleitet wird. Ich frage mich, ob Sie stattdessen nach dem ersten Senden genügend Verarbeitung durchführen könnten, um den Bestätigungsdialog zu generieren, und dann die Originalseite mit der Bestätigungsfrage zurückgeben könnten. Ähnlich wie bei der Validierung, außer dass die Validierungsregel prüft, ob der Bestätigungsschritt ausgeführt wurde (wobei die Bestätigungs-Benutzeroberfläche ausgeblendet ist, bis eine andere Validierung erfolgreich ist).
quelle
Keine Abneigung gegen TempData erforderlich ... Aber wenn es nicht richtig verwendet wird, könnte dies sicherlich ein Hinweis auf ein schlechtes Design sein. Wenn Sie RESTful-URLs verwenden, ist TempData eine bewährte Methode zum Übertragen von Nachrichten von Ihren POST-Aktionen zu Ihren GET-Aktionen. Bedenken Sie:
Sie haben ein Formular unter URL Products / New. Das Formular Posts to Products / Create, das das Formular validiert und das Produkt erstellt. Bei Erfolg leitet der Controller zu URL Products / 1 weiter und bei einem Fehler wird er zurück zu products / New umgeleitet, um Fehlermeldungen anzuzeigen.
Products / 1 ist nur die Standard-GET-Aktion für das Produkt. Wir möchten jedoch, dass eine Meldung angezeigt wird, dass die Einfügung erfolgreich war. TempData ist dafür perfekt. Fügen Sie die Nachricht zu TempData im Post Controller hinzu und fügen Sie eine if-Logik in die Ansicht ein, und fertig.
Bei einem Fehler habe ich die in formCollection eingegebenen Werte und eine Sammlung von Fehlermeldungen zu TempData in der Post-Aktion hinzugefügt und zu den ersten Aktionsprodcuts / New umgeleitet. Ich habe der Ansicht Logik hinzugefügt, um die Formulareingaben mit den zuvor eingegebenen Werten zusammen mit etwaigen Fehlermeldungen zu füllen. Scheint mir nett und sauber zu sein!
quelle
Products/New
? Welchen Wert bringt esProducts/Create
?Ich denke, Sie sollten gut zögern, bevor Sie TempData verwenden. TempData wird in der Sitzung gespeichert. Dies kann Auswirkungen auf Sie haben, wenn:
Wenn Ihre Site über eine hohe Verfügbarkeit verfügen muss, gibt es zusätzliche Überlegungen zum Anwenden des Sitzungsstatus. Dies sind jedoch alles lösbare Probleme.
quelle
Ich habe eine GetModel-Methode, die zuerst nach TempData ["Modell"] sucht und diese zurückgibt. Andernfalls lädt GetModel die entsprechenden Daten aus der Datenbank.
Es spart eine zusätzliche Last aus der Datenbank, wenn ich eine Aktion habe, die eine andere Ansicht zurückgeben muss, die dieselben Modelldaten erfordert.
quelle
Testen Sie sitzungslose Controller in MVC3. Es stellte sich heraus, dass die Verwendung einer Sitzung die parallele Ausführung der Anforderungen eines einzelnen Benutzers verhindert und somit zu einer Leistungsminderung führt.
Da Tempdata standardmäßig eine Sitzung verwendet, können Sie diese Funktion nicht verwenden. Sie können auf die Verwendung von Cookies für Tempdata umsteigen, aber es ist etwas umständlich (zumindest für mich). Immer noch sauberer als Viewstate, also ist es vielleicht kein so großer Dealbreaker.
quelle
Warum hast du so eine Abneigung? Dieses Ding macht einfach seinen Job und macht es gut :)
Wenn es Ihnen nicht gefällt, weil es nicht stark typisiert ist, können Sie jederzeit einen Wrapper erstellen, der Ihnen eine stark typisierte Oberfläche bietet.
quelle
Es ist wie mit ViewData, was bedeutet, dass es wahrscheinlich kein Sicherheitsrisiko darstellt. Aber ich würde lieber ViewData als TempData verwenden. Hier finden Sie einen Vergleich: http://www.squaredroot.com/2007/12/20/mvc-viewdata-vs-tempdata/
Je nach Design können Sie den Benutzer / Warenkorb oder das, was Sie benötigen, jederzeit in den temporären Daten in der Datenbank speichern und haben nur ein "IsReady" -Feld, das angibt, ob es abgeschlossen ist oder nicht, sodass es für später erweiterbar ist, wenn Sie es aufnehmen möchten Beachten Sie, dass Benutzer ihre Browser schließen können.
quelle
Alle guten Antworten, haben Sie sich das angesehen, um Nachrichten weiterzugeben?
TempData und Session sind nicht die beste Idee für RESTful-Architekturen, da die meisten Sitzungen im Speicher gespeichert sind. Wenn Sie also eine Serverfarm verwenden möchten, ist die Benutzersitzung auf einem Server vorhanden, während die nächste Anforderung an einen anderen Server gesendet werden kann.
Schauen Sie sich diese Verwendung von TempData zum Weiterleiten von Nachrichten hier an.
http://jameschambers.com/2014/06/day-14-bootstrap-alerts-and-mvc-framework-tempdata/
Möglicherweise kann dies angepasst werden, um einen Abfragezeichenfolgenansatz zu verwenden, wenn er nur zum Umleiten zu einer anderen Seite verwendet wird.
quelle