Einfach genug, so scheint es, aber es stellt sich heraus, dass das nicht der Fall ist - hauptsächlich aufgrund der Tatsache, dass der View nicht wissen kann, welchen Weg Sie durch Model und Controller dort gefunden haben. Unabhängig davon ist es ein Problem, das eine Lösung benötigt:
Ich habe einen Login-Link, der den Benutzer zu einem Formular zur Eingabe von Benutzername und Passwort führt. Wenn der Nutzer auf "Senden" klickt, möchte ich auf die Seite umleiten, die er gerade angesehen hat. Der einfachste Weg, dies zu tun, scheint die URL der aktuellen Seite als Querystring ( ...?returnUrl=...
) anzugeben und alles andere ist bereits erstellt.
Aber wo finde ich diese URL aus meiner Sicht, wenn ich den Link rendere? Ich kann natürlich kein RedirectToActionResult verwenden, da ich den Benutzer nicht wirklich übertragen möchte - rendern Sie die URL nur in einem Link. Wie geht es?
BEARBEITEN:
Ich habe jetzt eine Belohnung für diese Frage angefangen, und daher sehe ich auch in der Lage, meine Bedürfnisse zu klären.
Ich habe ein UserControl namens Login.ascx in meinem freigegebenen Ordner. Darin rende ich einen ActionLink auf das Login-Formular und es ist in der Fußzeile auf meiner Masterpage enthalten. Was ich erreichen möchte, ist folgendes:
Wenn der ActionLink gerendert wird, wird der Querystring returnUrl
mit der Route zu der Ansicht angehängt, die gerade gerendert wird . Wenn dies durchgeführt wird, wird der Benutzer nach erfolgreicher Anmeldung mit der Funktionalität, die bereits in das ASP.NET MVC Framework integriert ist, auf die Seite zurückgesetzt, die er gerade angesehen hat.
Der Grund, warum die vorherigen Antworten nicht ausreichend waren, ist hauptsächlich, dass sie keine Möglichkeit bieten, die Routen-URL auf die aktuelle Ansicht zu setzen . Ich weiß, wie man eine Querystring anhängt, aber ich weiß nicht, wie ich herausfinden soll, was ich in diese Zeichenfolge schreiben soll.
Um eine Antwort als Antwort zu markieren, möchte ich eine Methode, die Route von einer Benutzersteuerung auf der Masterseite zur aktuell angezeigten Ansicht zu rekonstruieren.
Die Lösung besteht darin, HttpContext.Current.Request.RawUrl wie folgt zu verwenden:
%Vor%Oder mit einer Erweiterungsmethode von MVC-Futures (Microsoft.Web.Mvc. dll):
%Vor%ActionController ist der Standard in mvc, aber nur ReturnUrl zu Ihrem eigenen hinzufügen.
Eine Möglichkeit wäre, die Links zu erstellen, die den Benutzer an das Anmeldeformular senden, mit returnUrl = / PageToReturnTo ( <a href="/Account/Login/?returnUrl=/Product/10">Login</a>
zum Beispiel). Sie sollten es so schreiben, dass die Rückkehr-URL aus Ihren Routen erstellt wurde. Das manuelle Schreiben dieser Links auf jeder Seite könnte mühsam sein.
Die Standardanmeldungsaktion in MVC hat die Funktion "returnUrl" bereits implementiert. Ich muss nur einen Wert übergeben und es wird den Rest erledigen. Hier ist ein Kopieren der Methodensignatur aus einem neuen Projekt.
%Vor%Hoffe das hilft dir!
Sie können Page.Request.Url
verwenden, um die Route zu erhalten, die zur aktuell gerenderten Ansicht geführt hat.
Obwohl dies eher ein kosmetisches Detail ist, möchten Sie vielleicht die Anfragen vereinheitlichen, die über die Routen '/' und '/default.aspx' kamen und immer zur Route '/' zurückkehren. Ich habe eine Hilfseigenschaft in meiner Masterseite, die genau das tut.
%Vor%Ich weiß nichts über ASPX, aber es gibt ein paar Probleme, auf die wir beim Aufbau dieses Problems stießen:
Wenn der Benutzer ein falsches Passwort erhält und die Login-Seite durchläuft, um erneut zu gehen, muss das Ziel weiterhin erhalten bleiben.
Wir entschieden uns auch, POST-Variablen auf einer Seite zu belassen, die dann die Just-in-Time-Anmeldung erforderte
Tags und Links asp.net-mvc url-routing