2009-08-17 10 views
10

Mam ActionLink, który wywołuje mój publiczny ActionResult, i chciałbym, aby powrócił na stronę, z której został wywołany, ale jak?Powrót ActionResult do strony, która go nazwała:

+0

Twoje pytanie nie jest zbyt jasne. Domyślnie najprostszy konstruktor ActionLink używa tego samego kontrolera, który przetwarzał widok, gdy tworzy łącze. Masz na myśli, że chcesz wykonać wywołanie w stylu ajax, aby strona przeglądarki się nie zmieniła? – womp

Odpowiedz

24

Istnieje kilka sztuczek, które można wykorzystać do tego.

Najprostszym jest ...

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

AbsoluteUri może nie dać dokładną ścieżkę, której szukasz, ale UrlReferrer powinny mieć imformation szukasz. Przekierowanie zwraca podklasę ActionResult, więc jest to poprawna wartość zwracana.

Innym pomysłem jest oparcie przekierowania lokalizacji na przechowywanych wartościach. Jest to przydatne, gdy zamierzasz wykonać wiele żądań przed przekierowaniem, na przykład podczas sprawdzania poprawności formularza i wyświetlania problemów z weryfikacją przy pierwszej odpowiedzi. Inna sytuacja będzie miała miejsce, gdy strona odsyłająca nie jest witryną lokalną. W obu przypadkach Twój referrer nie będzie taki, jak chcesz i będziesz musiał pobrać poprawną lokalizację z innego miejsca.

Specyficzne implementacje obejmują użycie ukrytego pola wprowadzania w formularzu, stanu sesji, pobrania wartości deskryptora z danych trasy lub nawet bardziej stałej wartości, takiej jak HttpContext.Request.ApplicationPath.

Powodzenia.

+0

Jestem na stronie "A", stamtąd przechodzę na stronę "B". Teraz odświeżam stronę "B". W takich przypadkach Request.UrlReferrer zwraca "B", jednak oczekuję "A". Jakaś pomoc? –

0

Należy pamiętać, że z powodu braku stanu sieci, ActionResult nie jest "wywoływany" z ActionLink, ale jest to po prostu adres URL żądany przez użytkownika.

Z tego powodu jedynym prawdziwym „wbudowaną” sposób można wiedzieć, gdzie dany użytkownik został pochodzący z to sprawdzając nagłówki żądania HTTP, aby zobaczyć, co strona odnosząc się:

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

You” d następnie będzie odpowiedzialny za przeanalizowanie metody działania z tego adresu URL, jeśli zamierzasz ją wywołać bezpośrednio. Pamiętaj, że ten odsyłający może nie być linkiem do Twojej witryny.

Powiązane problemy