Korzystając z ASP.NET MVC, istnieją sytuacje (takie jak przesłanie formularza), które mogą wymagać pliku RedirectToAction
.
Jedna z takich sytuacji ma miejsce, gdy po przesłaniu formularza napotkasz błędy walidacji i musisz przekierować z powrotem do formularza, ale chcesz, aby adres URL odzwierciedlał adres URL formularza, a nie stronę akcji, do której przesyła.
Ponieważ wymagam, aby formularz zawierał pierwotnie POST
zredagowane dane, dla wygody użytkownika, a także dla celów weryfikacji, w jaki sposób mogę przekazać dane przez RedirectToAction()
? Jeśli użyję parametru viewData, moje POST
parametry zostaną zmienione na GET
parametry.
c#
asp.net-mvc
Matt Mitchell
źródło
źródło
Odpowiedzi:
Rozwiązaniem jest użycie właściwości TempData do przechowywania żądanych składników Request.
Na przykład:
Następnie w akcji „Formularz” możesz:
źródło
Należy pamiętać, że TempData przechowuje kolekcję formularzy w sesji. Jeśli nie podoba Ci się to zachowanie, możesz zaimplementować nowy interfejs ITempDataProvider i użyć innego mechanizmu do przechowywania danych tymczasowych. Nie zrobiłbym tego, chyba że wiesz na pewno (poprzez pomiary i profilowanie), że użycie stanu sesji jest dla Ciebie szkodliwe.
źródło
Spójrz na MVCContrib , możesz to zrobić:
źródło
Istnieje inny sposób uniknięcia danych tymczasowych. Wzorzec, który mi się podoba, obejmuje utworzenie 1 akcji zarówno dla oryginalnego renderowania, jak i ponownego renderowania nieprawidłowego formularza. To wygląda mniej więcej tak:
To mniej więcej wzór. Trochę pseudo. Dzięki temu możesz utworzyć 1 widok do obsługi renderowania formularza, ponownego wyświetlania wartości (ponieważ formularz zostanie wypełniony poprzednimi wartościami) i wyświetlania komunikatów o błędach.
Podczas wysyłania do tej akcji, jeśli jest ona prawidłowa, przekazuje kontrolę nad inną akcją.
Staram się, aby ten wzorzec był łatwy w ramach walidacji .NET, gdy budujemy wsparcie dla MVC.
źródło
Jeśli chcesz przekazać dane do przekierowanej akcji, możesz użyć metody:
źródło
TempData to rozwiązanie, które utrzymuje dane przed działaniem.
źródło