Tak więc mam akcję, którą wzywam z kotwicy, Site/Controller/Action/ID
gdzie ID
jest int
.
Później muszę przekierować do tej samej akcji z kontrolera.
Czy jest na to sprytny sposób? Obecnie ID
chowam się w tempdata, ale kiedy wciśniesz f5, aby odświeżyć stronę po powrocie, tempdata zniknie, a strona się zawiesi.
c#
asp.net-mvc
controller
redirecttoaction
Eric Brown - Cal
źródło
źródło
Return RedirectToAction("Action", "Controller", New With {.id = 99})
Odpowiedź Kurta powinna być trafna, z moich badań, ale kiedy spróbowałem, musiałem to zrobić, aby rzeczywiście działało dla mnie:
Jeśli nie określiłem kontrolera i akcji w
RouteValueDictionary
nim, to nie działało.Także przy takim kodowaniu pierwszy parametr (Action) wydaje się być ignorowany. Jeśli więc po prostu określisz kontroler w Dict i oczekujesz, że pierwszy parametr określi akcję, to również nie zadziała.
Jeśli przyjdziesz później, najpierw wypróbuj odpowiedź Kurta, a jeśli nadal masz problemy, wypróbuj tę.
źródło
controller
parametr jest opcjonalny, jeśli akcja przekierowująca znajduje się na tym samym kontrolerze, co akcja przekierowująca.RedirectToAction
z parametrem:źródło
new {id = id}
działa równie dobrze, ponieważ framework wie, do której zmiennej się odwołujesz.Warto również zauważyć, że można przejść przez więcej niż 1 parametr. id zostanie użyty do utworzenia części adresu URL, a wszelkie inne zostaną przekazane jako parametry po? w adresie URL i będzie domyślnie UrlEncoded.
na przykład
Tak więc adres URL to:
Mogą być następnie przywoływane przez kontroler:
źródło
przykład
źródło
Przykład MVC 4 ...
Pamiętaj, że nie zawsze musisz przekazać parametr o nazwie ID
I,
Oczywiście możesz przypisać ciąg do pól modelu zamiast używać ViewBag, jeśli taka jest twoja preferencja.
źródło
Jeśli twój parametr okazuje się być złożonym obiektem, rozwiązuje to problem . Kluczem jest
RouteValueDictionary
konstruktor.Jeśli akurat masz kolekcje, jest to nieco trudniejsze, ale ta inna odpowiedź bardzo ładnie to obejmuje .
źródło
Pracował dla mnie, nie musiałem tego robić
new{id = id}
Przekierowałem do tego samego kontrolera, więc nie potrzebowałem,
"Controller"
ale nie jestem pewien, co do logiki, kiedy kontroler jest wymagany jako parametr.źródło
RedirectToAction("Action", "Controller", new { id = id});
było dokładnie tym, czego potrzebowałem w mojej aplikacji Core 3.1.Jeśli ktoś chce wyświetlić komunikat o błędzie
[httppost]
, może spróbować przekazać identyfikator za pomocądla takich szczegółów
Mam nadzieję, że działa dobrze.
źródło
…
…
źródło
Miałem również ten problem i całkiem dobrym sposobem na zrobienie tego, jeśli jesteś w tym samym kontrolerze, jest użycie nazwanych parametrów:
źródło
To może być lata temu, ale tak czy inaczej, zależy to również od trasy mapy Global.asax, ponieważ możesz dodawać lub edytować parametry, aby dopasować to, co chcesz.
na przykład.
Global.asax
parametry, które musisz przekazać, zmienią się na:
źródło
Jeśli konieczne będzie przekierowanie do działania poza kontrolerem, zadziała.
źródło
Następujące działanie zakończyło się sukcesem asp.net core 2.1. Może mieć zastosowanie gdzie indziej. Słownik ControllerBase.ControllerContext.RouteData.Values jest bezpośrednio dostępny i zapisywalny z poziomu metody akcji. Być może jest to ostateczny cel danych w innych rozwiązaniach. Pokazuje także, skąd pochodzą domyślne dane routingu.
źródło