Pokazywanie postów oznaczonych etykietą asp.net mvc. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą asp.net mvc. Pokaż wszystkie posty

sobota, 15 maja 2010

Wzorzec Post/Redirect/Get w ASP.NET MVC

Każdy(a) z Was pewnie spotkał się komunikatem "Aby wyświetlić tę stronę, Firefox musi ponownie przesłać dane etc..." O co chodzi i co zrobić, aby w naszych systemach tak nie było?

Podobny komunikat pokazuje, że odwiedzany przez nas serwis Web ma poważny problem, jakim jest ponowne wysyłanie POST. Schemat jest taki:

1. Przeglądarka wysyła polecenie GET i otrzymuje stronę z formularzem.
2. Użytkownik go wypełnia i klika "Wyślij".
3. Przeglądarka wysyła z użyciem POST dane do aplikacji.
4. Aplikacja odsyła stronę, że operacja się udała.
5. Użytkownik chce przeładować stronę z komunikatem.
6. Przeglądarka wysyła ostatnie zapytanie. Jakie? To z POST, z punktu 3.
7. Aplikacja drugi raz wykonuje akcję związaną z formularzem.

Czyli my chcemy zrobić coś normalnego (przeładować stronę, kliknąć "Wstecz"), a aplikacja zrobi coś więcej niż od niej oczekujemy. Hmmmm. A ciekawie robi się dopiero, kiedy ktoś używa przeglądarki, która nie ostrzega przed ponownym wysłaniem POST, takiej jak IE6.

Jak sobie z tym poradzić?