Problem z akcją po odświeżeniu strony [ASP.NET]


(szydera_) #1

Witam,

mam pewną akcję w gridzie po kliknięciu przycisku. Jednak każde odświeżenie strony już po wykonaniu tej akcji, powoduje wywołanie jej ponownie ;/ Jak to zablokować jakoś? ;/ Co więcej, mam dwa gridy i w każdym jest jakaś akcja i początkowo ten problem występował w obydwu miejscach. Dodałem na początku w PageLoad coś takiego:

this.Page.Form.DefaultButton = showBtn.UniqueID;

czyli jakby ustawiłem domyślny przycisk na jakiś na stronie. Tak czy siak pomogło mi to, ale tylko na jednego grida ;/ W drugim nie wiem czemu cały czas jest problem. Znalazłem gdzieś wskazówkę, żeby po tej akcji przekierować stronę jeszcze raz na ten sam url:

Response.Redirect(Request.Url.ToString());

ale w tym przypadku nie mogę tak zrobić... Da się to jakoś rozwiązać? Sprawdzenie IsPostBack też mi raczej nie pomoże... Dlaczego akcja z tego przycisku wykonuje się po odświeżenie strony? Z góry dziękuję za pomoc...


(Ryan) #2

Akcja to postback, więc przeładowanie strony w przeglądarce wysyła ten postback ponownie. Myśl o tym w ten sposób: jesteś na http://jakasstrona.pl i klikasz w link wiodący do http://jakasstrona.pl?wartosc=cos. Wciśnięcie F5 odświeży http://jakasstrona.pl?wartosc=cos, prawda? Analogicznie jest z danymi post: to "wartosc=cos" jest częścią wywołania strony: niewidoczną, ale zostaje z nią. Więc wciśnięcie F5 powoduje ponowne wywołanie zakodowanej w ten sposób akcji.

Sposobów na obejście tego jest kilka. Prostszy to Response.Redirect po wykonaniu logiki akcji, ale mówisz, że nie możesz (dlaczego?). Trudniejszy to unikalny kanarek dla każdej akcji, który uniemożliwia wykonanie dwa razy tego samego.