2009-10-01 10 views
21

Użyłem następujących w pliku web.configcel <stronach enableEventValidation = "false">

<pages enableEventValidation="false"> 

To rozwiązuje problem byliśmy mający z Ajax.

Mamy stronę internetową, która jeśli przeglądasz bezpośrednio za pomocą standardowego hiperłącza HTML, działa dobrze.

Jeśli przeglądasz stronę z innej strony przez link wewnątrz widoku siatki i response.redirecting w zdarzeniu RowCommand do strony przekazującej identyfikator w zapytaniu. Strona zgłasza błędy z elementów sterujących wewnątrz panelu, podając "Nieprawidłowy argument odświeżenia lub wywołania zwrotnego Sprawdzanie poprawności zdarzenia jest włączone za pomocą konfiguracji lub na stronie <% @ Page EnableEventValidation =" true "%>. Ze względów bezpieczeństwa ta funkcja weryfikuje, czy argumenty dotyczące wywołania zwrotnego lub wywołania zwrotnego pochodzą z formantu serwera, który je pierwotnie wyrenderował.Jeśli dane są poprawne i oczekiwane, użyj metody ClientScriptManager.RegisterForEventValidation w celu zarejestrowania odświeżenia zwrotnego lub danych wywołania zwrotnego do sprawdzenia poprawności. "

I "Jestem zadowolony z tego, że weryfikacja strony jest fałszywa, ponieważ wydaje się, że nie miała ona żadnego innego skutku.

Jakieś pomysły, co się dzieje?

+0

Znalazłem [tę odpowiedź] (http://stackoverflow.com/a/9104931/1178314) na pytanie dupe jest całkiem dobre i brakuje tutaj. –

Odpowiedz

12

Przeczytaj documentation.

EDYCJA: Ze względów bezpieczeństwa najlepiej jest pozostawić ustawienie prawdziwe, gdy tylko możesz.

Dlatego zaleca się ustawienie go na wartość false tylko na poszczególnych stronach AJAX, w których powoduje problemy, pozostawiając to w pliku web.config.

+1

Przeczytałem to oczywiście, ale znalazłem ograniczone wyjaśnienie tylko doprowadziło mnie do przekonania, że ​​nie miałbym problemów z ustawieniem tego na false, chyba że ktoś celowo próbował być złośliwy, to nie sugeruje, że reszta stron będzie teraz zachowywać się inaczej . Z tego zakładam, że jest dla mnie bezpieczne, aby zostawić to jako fałszywe. Aplikacja w intranecie i nie boję się złośliwych ataków. – Robert

+0

Po dalszych badaniach wybieram EDIT. Ma to sens w przypadku aplikacji i teraz znowu słodko śpiewa, wszystkie są zsynchronizowane. – Robert

+0

W takim razie możesz wycofać swoje zwycięstwo? – SLaks

6

Od here

Nieprawidłowy odświeżenie strony lub błędów argumentem zwrotna jest zasadniczo podnieść z powodu funkcji Event Validation. Funkcja EventValidation jest nową funkcją w ASP.NET 2.0 i zapewnia dodatkowy poziom kontroli w celu sprawdzenia, czy odświeżenie od kontroli na kliencie rzeczywiście pochodzi z tej kontroli, a nie od kogoś złośliwego za pomocą czegoś takiego jak wtrysk skryptu krzyżowego próbować manipulować rzeczami. Jest to część naszej ogólnej strategii polegającej na zwiększaniu bezpieczeństwa poziomów głębokości do modelu programowania - aby programiści mogli być domyślnie bezpieczni, nawet jeśli zapomnieli dodać własne testy bezpieczeństwa.

Teraz Nieprawidłowy odświeżenie lub argumentem CallBack błąd może wystąpić podczas wypalania zdarzenie click i obiekt jest ponownego wiązania lub jego właściwości ulegają zmianie w przypadku Page_Load lub ktoś próbuje włamać się do systemu z cross site scripting. Za każdym razem, gdy program .Net Framework renderuje stronę, kojarzy ona unikatowy Guid dla wszystkich kontrolek. Podczas wiązania gridview lub repeatera, w każdej strukturze bazy danych zostanie powiązany nowy GUID dla contorl. Tak więc za każdym razem, gdy wystrzeliwujesz wydarzenie, upewnij się, że zdarzenie Page_Load nie zmienia kontroli, ponieważ jeśli zmieniono formant, będzie miał inny Guid, który ostrzelał zdarzenie w celu oddzwonienia. Oto niektóre scenariusze z tym błędem.

1) Nieprawidłowy argument odświeżenia lub oddzwonienia w GridView Problem może być: Wiązanie danych w zdarzeniu Page_Load za pomocą źródła danych obiektu lub wiązania ręcznego z wywołaniem funkcji. Spowoduje to, że dane GridView będą wiązały dane dotyczące każdego zdarzenia związanego z dowolną kontrolą.Podczas uruchamiania dowolnego polecenia GridView za pomocą OnRowCommand, przed uruchomieniem RowCommand, twój GridView ponownie się powiąza i cała kontrola w nim zostanie przypisana do nowego identyfikatora. Tak więc RowCommand nie może uzyskać elementu, który wystrzelił to wydarzenie. Rozwiązanie za nieprawidłowe odświeżenie lub oddzwaniania argument w GridView: Można powiązać dane w ten czy stan

if (!IsPostBack) 

    { 

      //Your code for Bind data 

    } 

Kod ten będzie z pewnością daje rozwiązanie jeżeli to nie poskutkuje, to sprawdzić, czy jakakolwiek inna kontrola nie daje błąd.

+0

Dziękuję za wejście, które miałem przeczytać na ten temat, ale stosunek wysiłku do wyników nie był dobry;) Dzięki – Robert

3

Jest jedna rzecz, warto dodać tutaj: Jeśli chcesz wyłączyć weryfikację zdarzeń dla konkretnej kontroli, zamiast całej strony, istnieje obejście udokumentowane here i here (a obecnie odwołuje się relevant Connect suggestion):

Po prostu podklasuj odpowiednią klasę WebControl i nie ustawiaj atrybutu SupportsEventValidation na podklasie. Podklasa będzie zwolniona z walidacji zdarzeń.

+0

Awans o linki do jasnego wyjaśnienia :) –