Stan śledzenia przy użyciu ASP.NET AJAX / ICallbackEventHandler

głosy
9

Mam problem z utrzymaniem stanu w stronie ASP.NET AJAX. Krótka wersja: Potrzebuję jakiś sposób, aby zaktualizować ViewState stronę po tym, jak oddzwanianie asynchroniczny został złożony, aby odzwierciedlić każdy stan zmienia serwer wykonany podczas wywołania asynchronicznego.

To wydaje się być częstym problemem, ale opiszę mój scenariusz, aby pomóc wyjaśnić:

Mam kontroli siatkowej, która ma pewne ulepszenia JavaScript - a mianowicie zdolność do przeciągania i upuszczania kolumn i wierszy. Gdy kolumna lub rząd wkrapla się do nowej pozycji, metoda AJAX wywołany powiadomić sterowania po stronie serwera i ogień odpowiednie zdarzenie strony serwera ( „OnColumnMoved” lub „OnRowMoved”).

ASP.NET AJAX wywołuje domyślnie wysłać całą stronę jako żądanie. W ten sposób strona przechodzi cały cykl, viewstate jest zachowywane i stan kontroli zostanie przywrócony przed metoda RaiseCallbackEvent jest wywoływany.

Jednakże, ponieważ wywołanie AJAX nie zaktualizować stronę, elementu ViewState odzwierciedla pierwotny stan kontrolą, nawet po tym, kolumnę lub wiersz został przeniesiony. Więc po raz drugi działanie występuje po stronie klienta, żądanie AJAX idzie na serwer i strona i kontrola są zbudowane z powrotem ponownie, aby odzwierciedlić pierwszy stan kontroli, a nie stan po pierwszej kolumny lub wiersza został przeniesiony.

Problem ten rozciąga się na wiele implikacji. Na przykład, jeśli mamy po stronie klienta / AJAX działania, aby dodać nowy element do siatki, a następnie wiersz jest przeciągany, siatka zbudowana jest po stronie serwera z jednego mniej pozycji niż na stronie klienta.

I wreszcie & najpoważniej na moim konkretnym przykładzie, rzeczywisty obiekt źródła danych jesteśmy działając na przechowywana jest w ViewState strony. To była decyzja projekt, aby umożliwić prowadzenie pełnostanowego kopię manipulacji danymi, które mogą być popełnione zarówno do DB po wielu manipulacji lub wyrzucić, jeśli użytkownik wycofuje się. To jest bardzo trudne do zmiany.

Więc znowu muszę drogę dla ViewState strona być aktualizowane na oddzwanianie po metoda AJAX jest zwolniony.

Utwórz 05/08/2008 o 14:52
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
1

Jeśli jesteś już tasowanie ViewState wokół tak, równie dobrze można użyć UpdatePanel. Jej częściowe postbacks zostanie automatycznie zaktualizować stronę za ViewState.

Odpowiedział 07/08/2008 o 17:19
źródło użytkownik

głosy
1

Sprawdź ten wpis na blogu: szczypanie ICallbackEventHandler i viewstate . Autor wydaje się być zajęcie się samą sytuację, gdy występują:

Tak więc podczas korzystania ICallbackEventHandler masz dwie przeszkody do pokonania mieć zaktualizowaną zarządzania publiczną dla wywołania zwrotne. Pierwszym z nich jest problem stanu wyświetlania tylko do odczytu. Druga jest faktycznie rejestracji zmian dokonanych przez użytkownika na stronę przed wyzwalania wywołania zwrotnego.

Zobacz posta na jego sugestii, w jaki sposób rozwiązać ten problem. Również sprawdzić ten wpis na forum , które omawia ten sam problem, jak również.

Odpowiedział 05/08/2008 o 15:25
źródło użytkownik

głosy
0

Nie rozumiem, dlaczego należałoby użyć niestandardowego formantu za to, gdy wbudowane ASP.NET AJAX UpdatePanel robi to samo.

To po prostu dodaje więcej złożoności, daje mniejsze poparcie, i sprawia, że ​​trudniej dla innych do pracy nad aplikacją.

Odpowiedział 08/08/2008 o 05:56
źródło użytkownik

głosy
0

Znalazłem dość eleganckie rozwiązanie z Telerik za RadAjaxManager . To działa całkiem dobrze, w zasadzie zarejestrować każdą kontrolę, która może powołać odświeżenie strony, a następnie zarejestrować każdej kontroli, które powinny być ponownie rysowane po tym odświeżenie strony odbywa się asynchronicznie. RadAjaxManager zaktualizuje DOM po odświeżenie strony async i przepisać ViewState i wszystkich dotkniętych kontroli. Po zrobieniu zerknąć w reflektor, to wygląda trochę kludgy pod maską, ale to pasuje do moich celów.

Odpowiedział 08/08/2008 o 05:18
źródło użytkownik

głosy
0

I rzeczywiście znaleźć zarówno tych linków dostarczonych, ale jak wspomniano są one po prostu opisując problem, nie rozwiązując go. Autor blogu sugeruje obejścia za pomocą innego dostawcy ViewState, ale niestety nie jest to możliwe w tym przypadku ... Naprawdę muszę opuścić dane dotyczące ViewState sam i po prostu podpiąć do tego, co zostało zrobione po wyjęciu z pudełka.

Odpowiedział 05/08/2008 o 15:54
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more