2009-08-17 13 views
10

Ich habe einen ActionLink, der mein öffentliches ActionResult aufruft, und ich möchte, dass es auf die Seite zurückkehrt, von der es aufgerufen wurde, aber wie?ActionResult zurück zur Seite, die es genannt

+0

Ihre Frage ist nicht sehr klar. Standardmäßig verwendet der einfachste ActionLink-Konstruktor denselben Controller, der die Ansicht beim Erstellen der Verknüpfung verarbeitet hat. Meinst du, du willst einen Ajax-Anruf, damit sich die Browserseite nicht ändert? – womp

Antwort

24

Es gibt ein paar Tricks, die Sie dafür verwenden können.

Die einfachste ist ...

return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri); 

absoluteURI kann Ihnen nicht den genauen Pfad, den Sie suchen, aber UrlReferrer sollte die imformation haben Sie suchen. Redirect gibt eine Unterklasse von ActionResult zurück, so dass es sich um einen gültigen Rückgabewert handelt.

Eine andere Idee ist es, den Umleitungsort von gespeicherten Werten abzugrenzen. Dies ist nützlich, wenn Sie mehrere Anforderungen stellen, bevor Sie umleiten möchten, z. B. wenn Sie ein Formular validieren und Validierungsprobleme bei der ersten Antwort anzeigen. Eine andere Situation wird sein, wenn der Referrer keine lokale Site ist. In beiden Fällen ist Ihr Referrer nicht das, was Sie wollen und Sie müssen den richtigen Ort von woanders abrufen.

Bestimmte Implementierungen umfassen die Verwendung eines ausgeblendeten Eingabefelds in Ihrem Formular, den Sitzungsstatus, das Ziehen eines Deskriptorwerts aus den Routendaten oder auch nur einen konstanteren Wert wie HttpContext.Request.ApplicationPath.

Viel Glück.

+0

Ich bin auf der Seite "A", von dort navigiere ich auf die Seite "B". Jetzt aktualisiere ich die Seite 'B'. In solchen Fällen gibt Request.UrlReferrer 'B' zurück, aber ich erwarte 'A'. Irgendwelche Hilfe ?? –

0

Bedenken Sie, dass Ihr ActionResult aufgrund der statuslosen Natur des Webs nicht von Ihrem ActionLink "aufgerufen" wird, sondern nur eine URL, die der User-Agent angefordert hat.

Aus diesem Grunde, die einzigen wirklichen „eingebauten“, wie Sie wissen, wo der Benutzer herkam ist durch die HTTP-Request-Header inspizieren, um zu sehen, was die verweisenden Seite war:

string referrer = Request.Headers["referer"]; 

Sie‘ d dann verantwortlich sein für das Analysieren der Aktionsmethode von dieser URL, wenn Sie sie direkt aufrufen würden. Beachten Sie, dass dieser Verweis möglicherweise kein Link auf Ihrer eigenen Website ist.

Verwandte Themen