Wie kann ich die Erhaltung der url (mit dem querystring) nach einem Http-Post, aber auch hinzufügen, ein Fehler um die Modell-Zustand?
Im wesentlichen möchte ich versuche zu tun, ist, einen Benutzer authentifizieren, indem er Sie geben Sie Ihr Konto und Ihre social security number. Wenn Sie geben Sie eine fehlerhafte Kombination, ich habe das folgende auf der Authenticate
post Aktion:
ModelState.AddModelError("Authenticated", authenticationError);
return View();
Dieser zeigt den Fehler an, aber dann verliere ich, was meine query-string. Eine alternative zum halten der query-string ist:
ModelState.AddModelError("Authenticated", authenticationError);
return Redirect(Request.Url + "?returnUrl=" + returnUrl);
Dadurch wird der query-string, aber der Fehler wird nicht angezeigt. Ich nehme an, dies ist, weil die ModelState
geändert hat.
Brauche ich die returnUrl
weil der Benutzer gezwungen ist, die Authenticate
Seite, wenn Sie klicken Sie, um ein bestimmtes Ereignis. Ich will es so einrichten, dass Sie immer noch zu diesem event, sobald Sie authentifizieren sich.
Gibt es eine Möglichkeit, die ich erreichen will sowohl die Erhaltung der query-string und zeigt die Modell-Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein zweites Szenario nicht die Modell-Zustand, da bei einer Umleitung der browser eine separate Anfrage zu, dass die Lage, separate requests = neues Modell Zustand.
Ich würde vorschlagen, mit deinem ersten Szenario und legen Sie eine "ReturnUrl" in Ihrem Modell und machen es zu dem client als hidden-Feld.
ViewBag
Ansatz, wie würde ich halten, verlieren diereturnUrl
wenn der Benutzer nicht authentifiziert, richtig? Von dem, was ich gesehen habe,returnUrl
wirdnull
wenn ein Benutzer nicht authentifizieren richtig auf Ihren ersten Versuch. Bin ich etwas fehlt mit diese?ViewBag
Sie haben zu schreiben, die die hidden-Feld im Formular-Bereich der view, dann auf der nächsten Anforderung, die in Ihrem controller-Methode zu befragen, dieRequest
- Objekt für das Formular-Feld "ReturnUrl".Ivan Korytin's Antwort war die beste (und einzige Antwort, die ich finden konnte, was wohl tatsächlich ordnungsgemäß funktioniert, ohne versteckte Feld hacks), die ich habe etwas verbessert mit
Request.QueryString
.Setzen Sie die Parameter als Teil der form-action:
Wenn Sie führen den folgenden query-string (und
GET
Parameter) werden jetzt beibehalten: