Tracking staat met ASP.NET AJAX / ICallbackEventHandler

stemmen
9

Ik heb een probleem met de handhaving van de staat in een ASP.NET AJAX pagina. Korte versie: Ik moet een of andere manier naar de pagina ViewState te werken nadat een asynchrone callback is gemaakt, om na te denken elke staat, verandert de server die tijdens de asynchrone gesprek.

Dit lijkt een veelvoorkomend probleem te zijn, maar ik zal mijn scenario te beschrijven om te helpen uit te leggen:

Ik heb een rooster-achtige controle die enkele JavaScript verbeteringen heeft - namelijk de mogelijkheid om slepen kolommen en rijen. Wanneer een kolom of rij valt in een nieuwe positie, wordt een AJAX werkwijze aangeroepen met de controle serverzijde kennis en vuur een overeenkomstige server-side event ( OnColumnMoved of OnRowMoved).

ASP.NET AJAX oproepen, standaard, stuurt u de hele pagina als het verzoek. Op die manier de pagina gaat door middel van een volledige levenscyclus, wordt viewstate bleef en de toestand van de controle wordt hersteld voordat de RaiseCallbackEvent methode wordt aangeroepen.

Aangezien de AJAX gesprek niet de pagina bij te werken, de ViewState weerspiegelt de oorspronkelijke toestand van de bediening, zelfs na de kolom of rij is verplaatst. Dus de tweede keer dat een client-side actie optreedt, wordt de AJAX verzoek gaat naar de server en de pagina & control zijn weer omhoog gebouwd om de reflecteren eerste toestand van de controle, niet de staat na de eerste kolom of rij werd verplaatst.

Dit probleem strekt zich uit tot vele implicaties. Bijvoorbeeld als we een client-side / AJAX actie om een ​​nieuw item toe te voegen aan het net, en vervolgens een rij wordt gesleept, het rooster is ingebouwd server-side met een minder punt dan aan de client-side.

En tenslotte & zwaarst voor mijn specifiek voorbeeld, de feitelijke gegevensbron object dat we handelen op wordt opgeslagen in de pagina ViewState. Dat was een ontwerp beslissing om het houden van een stateful kopie van de gemanipuleerde gegevens die ofwel kan inzetten voor DB na vele manipulaties of weggegooid als de gebruiker een back-out. Dat is heel moeilijk te veranderen.

Dus, nogmaals, ik heb een manier voor de pagina ViewState worden bijgewerkt op terugbellen na de AJAX methode wordt ontslagen.

De vraag is gesteld op 05/08/2008 om 14:52
bron van user
In andere talen...                            


5 antwoorden

stemmen
1

Als u al de ViewState je schuifelen rond toch, zou je net zo goed gebruik maken van een UpdatePanel. De gedeeltelijke postbacks zal de pagina's ViewState automatisch bijgewerkt.

antwoordde op 07/08/2008 om 17:19
bron van user

stemmen
1

Check deze blog post: het instellen van het ICallbackEventHandler en Viewstate . De auteur lijkt te zijn het aanpakken van de situatie die u ondervindt:

Dus bij het gebruik van ICallbackEventHandler je twee obstakels te overwinnen om op de hoogte state management voor callbacks te hebben. Ten eerste is het probleem van de alleen-lezen viewstate. De andere is eigenlijk het registreren van de veranderingen die de gebruiker heeft geleverd aan de pagina vóór de inwerkingtreding van het callback.

Zie de blog post voor zijn suggesties over hoe dit op te lossen. Lees ook dit forum berichten die hetzelfde probleem ook bespreekt.

antwoordde op 05/08/2008 om 15:25
bron van user

stemmen
0

Ik begrijp niet waarom u een aangepaste besturing voor dat, wanneer de ingebouwde ASP.NET AJAX UpdatePanel doet hetzelfde zou gebruiken.

Het voegt alleen maar meer complexiteit, geeft u minder steun, en maakt het moeilijker voor anderen om te werken aan uw app.

antwoordde op 08/08/2008 om 05:56
bron van user

stemmen
0

Ik vond een vrij elegante oplossing met Telerik RadAjaxManager . Het werkt heel mooi, in wezen u elke controle die een postback zou roepen, en vervolgens registreren elke controle die moet opnieuw worden getrokken na dat postback asynchroon wordt uitgevoerd te registreren. De RadAjaxManager zal de DOM na de asynchrone postback te werken en herschrijven van de ViewState en alle betrokken controles. Na het nemen van een kijkje in Reflector, het ziet er een beetje klungelige onder de motorkap, maar het past bij mijn doeleinden.

antwoordde op 08/08/2008 om 05:18
bron van user

stemmen
0

Ik vond eigenlijk allebei van die links die u verstrekt, maar zoals gezegd ze zijn gewoon het probleem te beschrijven, niet het oplossen ervan. De auteur van de blog post suggereert een oplossing met behulp van een andere ViewState provider, maar dat is helaas niet mogelijk in dit geval ... Ik echt nodig om de gegevens van de ViewState met rust te laten en gewoon aansluiten op wat er wordt gedaan out-of-the-box.

antwoordde op 05/08/2008 om 15:54
bron van user

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