Ich habe ein Projekt mit einem Formular, das über mehrere Teile abgeschlossen ist. Z.B. Teil 1 enthält möglicherweise Ihren Namen und Teil 2 Ihre Adresse.Post-Redirect-Get-Muster in langen/Assistentenformularen
In MVC habe ich mehrere Ansichten, die jedes der Teile und ein Modell für alle Formulardaten darstellen.
Ich möchte die Formulardaten nach Abschluss jedes Teils speichern und den gespeicherten Datensatz im nächsten Teil abrufen (damit das gesamte Modell in jeder Phase verfügbar ist).
Ich benutze Post-Redirect-Get, um zu vermeiden, dass die 'Formular kann erneut gesendet werden' Warnungen von Browsern mit den Zurück-und Vorwärts-Tasten.
Controller-Code
[HttpGet]
[Route("Form/Part/{id}")]
public ActionResult Part(int id, int? recordId)
{
var model = new MyVM();
if(recordId.HasValue) {
// get record from DB
// map record to 'model'
}
return View("Form.{id}", model);
}
[HttpPost]
[Route("Form/Part/{id}")]
public ActionResult Part(int id, MyVM model)
{
// map model to entity
// save/update entity
return RedirectToAction($"Form/Part/{id + 1}", new { recordId = recordId })
}
Meine Frage ist, wie man am besten die ID des neu erstellten/aktualisierte Datensatz zu erhalten und es auf den nächsten Formteil übergeben.
Während der vorbei recordId
als routeValue
Werke, es bricht, wenn ich den Browser zurück, wie die Schaltfläche recordId
im Abfragezeichenfolgeflag verloren, verwenden.
Ich habe überlegt, dies in der Sitzung vielleicht zu speichern, aber ich möchte nicht wirklich die HttpContext
ins Spiel bringen, wenn ich nicht zu Testzwecken muss.
Gibt es einen empfohlenen Weg, um so etwas zu erreichen? Irgendwelche Gedanken über die verschiedenen Möglichkeiten, um den aktuellen Rekord zu verfolgen, würden sehr geschätzt werden.
Sie könnten einen Cookie betrachten (und wenn 'id'' null' ist, überprüfen Sie den Cookie auf den Wert). Und Sie können auch den aktuellen Schritt hinzufügen, damit sich Benutzer abmelden und später zur Fertigstellung zurückkehren können (und im letzten Schritt entfernen). –