Sledování stavu pomocí ASP.NET AJAX / ICallbackEventHandler

hlasů
9

Mám problém s udržováním stavu ve stránce ASP.NET AJAX. Krátká verze: Potřebuju nějaký způsob, jak aktualizovat stránku Viewstate poté, co byl proveden asynchronní zpětné volání, aby odrážely každý stát změní server dosažený během asynchronní volání.

To se zdá být častým problémem, ale popíšu svůj scénář pomoci vysvětlit:

Mám Grid Control-like, který má některá vylepšení JavaScriptu - konkrétně schopnost přetáhnout sloupců a řádků. Když je sloupec nebo řádek se přikapává do nové polohy, metoda AJAX je vyvolána oznámit straně serveru řízení a oheň odpovídající straně serveru události ( „OnColumnMoved“ nebo „OnRowMoved“).

ASP.NET AJAX volání, standardně posílat celou stránku jako žádost. Tímto způsobem je stránka prochází kompletním životním cyklem, ViewState je trvalé a stav ovládacího prvku je obnovena před je vyvolána metoda RaiseCallbackEvent.

Vzhledem k tomu, volání AJAX neaktualizuje stránky, ViewState odráží původní stav kontroly, a to i poté, co sloupec nebo řádek byla přesunuta. Takže podruhé dochází na straně klienta akce, požadavek AJAX jde do serveru a stránky a kontrola jsou postaveny znovu nahoru, aby odrážely první stav ovládacího prvku, nikoli stav po první sloupec nebo řádek byl přesunut.

Tento problém se vztahuje na mnoho důsledků. Například pokud máme / AJAX akci na straně klienta pro přidání nové položky do sítě, a pak řada přesunuta, mřížka je postaven na straně serveru s jednou menší položky, než na straně klienta.

A konečně si nejvážněji pro mou konkrétní příklad, skutečný objekt zdroje dat jednáme na základě je uložena na stránce ViewState. To bylo rozhodnutí o provedení umožnit zachování stavovou kopii manipulovaného údajů, které mohou být buď spáchal DB po mnoha manipulacím nebo zahodí v případě, že uživatel ustoupí. Že je velmi obtížné změnit.

Takže ještě jednou, musím způsob, jak stránky ViewState být aktualizovány na zpětné volání po odpálení metody AJAX.

Položena 05/08/2008 v 14:52
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
1

Pokud jste již zamíchání ViewState kolem přesto, můžete také použít UpdatePanel. Jeho dílčí postbacks bude automaticky aktualizovat dané stránky ViewState.

Odpovězeno 07/08/2008 v 17:19
zdroj uživatelem

hlasů
1

Podívejte se na tento příspěvek na blogu: laděním ICallbackEventHandler a ViewState . Autor se zdá být zabývat samotnou situaci, že jste se setkali:

Takže při použití ICallbackEventHandler máte dvě překážky překonat mít aktualizovanou státní správy pro zpětné volání. Prvním z nich je problém pouze pro čtení ViewState. Na druhé straně je vlastně registraci změny, které uživatel provedené na stránku před spuštěním zpětné volání.

Podívejte se na blog post pro své návrhy, jak to vyřešit. Také vyzkoušet tento fóra příspěvek , který pojednává o stejný problém stejně.

Odpovězeno 05/08/2008 v 15:25
zdroj uživatelem

hlasů
0

Nechápu, proč byste použít vlastní ovládací prvek pro to, když je vestavěný ASP.NET AJAX UpdatePanel dělá totéž.

To jen přidává větší složitosti, vám dává menší podporu, a ztěžuje pro další práci na vaší aplikaci.

Odpovězeno 08/08/2008 v 05:56
zdroj uživatelem

hlasů
0

Našel jsem docela elegantní řešení s Telerik je RadAjaxManager . To funguje docela dobře, v podstatě se registrovat jednotlivé ovládací prvky, které by mohly vyvolat zpětné odeslání, a poté zaregistrovat jednotlivé ovládací prvky, které by měly být re-natažený po tom postback se provádí asynchronně. RadAjaxManager bude aktualizovat DOM po asynchronní postback a přepsat Viewstate a všechny ovlivněné kontroly. Poté, co vzal nahlédnout do reflektoru, vypadá to trochu kludgy pod kapotou, ale to vyhovuje mým záměrům.

Odpovězeno 08/08/2008 v 05:18
zdroj uživatelem

hlasů
0

Vlastně jsem našel oba ty odkazy, které jste poskytli, ale jak již bylo uvedeno, že jsou jednoduše popsat problém, není to řešení. Autorem blogu navrhuje řešení pomocí jiného poskytovatele ViewState, ale bohužel to není možné v tomto případě ... Já opravdu potřeba nechat údaje o ViewState sám a jen připojit k tomu, co se děje out-of-the-box.

Odpovězeno 05/08/2008 v 15:54
zdroj uživatelem

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