Sporing tilstand ved hjelp av ASP.NET AJAX / ICallbackEventHandler

stemmer
10

Jeg har et problem med å opprettholde tilstanden i en ASP.NET AJAX side. Kort versjon: Jeg trenger noen måte å oppdatere siden Visningsstatusen etter en asynkron tilbakeringing er gjort, for å reflektere noen stat endrer server gjort under async samtalen.

Dette synes å være et vanlig problem, men jeg vil beskrive mitt scenario for å forklare:

Jeg har en grid-lignende kontroll som har noen Javascript forbedringer - nemlig evnen dra og slippe kolonner og rader. Når en kolonne eller rad er droppet inn i en ny stilling, er en AJAX metode anvendt for å gi beskjed til styre server-side og avfyre ​​et tilsvarende server-side arrangement ( OnColumnMoved eller OnRowMoved).

ASP.NET AJAX samtaler, som standard, sende hele siden som forespørselen. På den måten siden går gjennom en fullstendig livssyklus, er Visningsstatusen faste og tilstanden til kontroll er gjenopprettet før RaiseCallbackEvent metoden startes.

Men siden AJAX samtalen ikke oppdatere siden, reflekterer Visningsstatusen den opprinnelige tilstanden i kontroll, selv etter at kolonnen eller raden har blitt flyttet. Så andre gang en klientsiden handling skjer, går AJAX forespørsel til serveren og siden og kontroll er bygd opp igjen for å reflektere den første staten kontrollen ble ikke staten etter den første kolonnen eller raden flyttet.

Dette problemet strekker seg til mange implikasjoner. For eksempel hvis vi har en klient-side / Ajax handling for å legge til et nytt element til nettet, og deretter en rad dras, gitteret er bygget server-side med en mindre element enn på klientsiden.

Og til slutt og mest alvorlig for min spesifikke eksempel de faktiske dataene kilden objektet vi opptrer på, blir lagret på siden Visningsstatusen. Det var et design beslutning om å tillate å holde en tilstands kopi av manipulert data som kan enten være forpliktet til DB etter mange manipulasjoner eller forkastet hvis brukeren rygger ut. Det er svært vanskelig å endre.

Så, igjen, jeg trenger en måte for siden Visningsstatusen å bli oppdatert på tilbakering etter at AJAX metode er avfyrt.

Publisert på 05/08/2008 klokken 13:52
kilden bruker
På andre språk...                            


5 svar

stemmer
1

Hvis du allerede stokking av Visningsstatusen rundt allikevel, kan du like godt bruke en Update. Dens delvis postbacks vil oppdatere siden sin Visningsstatusen automatisk.

Svarte 07/08/2008 kl. 16:19
kilden bruker

stemmer
1

Sjekk ut dette blogginnlegget: Tweaking ICallbackEventHandler og Visningsstatusen . Forfatteren synes å være å ta opp svært situasjon som du opplever:

Så når du bruker ICallbackEventHandler du har to hindringer å overvinne for å ha oppdatert statlig styring for tilbakeanrop. Først er problemet med skrivebeskyttet Visningsstatusen. Den andre er faktisk registrerer endringene brukeren har gjort i siden før utløser tilbakeringing.

Se blogginnlegget hans forslag om hvordan du kan løse dette. Sjekk også ut denne forum innlegg som diskuterer det samme problemet også.

Svarte 05/08/2008 kl. 14:25
kilden bruker

stemmer
0

Jeg forstår ikke hvorfor du ville bruke en egendefinert kontroll for det, når den innebygde ASP.NET AJAX Update gjør det samme.

Det legger bare mer kompleksitet, gir deg mindre støtte, og gjør det vanskeligere for andre å jobbe med programmet ditt.

Svarte 08/08/2008 kl. 04:56
kilden bruker

stemmer
0

Jeg fant en ganske elegant løsning med Telerik er RadAjaxManager . Det fungerer ganske bra, i hovedsak du registrere hver kontroll som kan påkalle en postback, og deretter registrere hver kontroll som bør bli re-trukket etter at postback utføres asynkront. Den RadAjaxManager vil oppdatere DOM etter async tilbakesending og omskrive Visningsstatusen og alle berørte kontroller. Etter å ha tatt en titt på reflektor, det ser litt kludgy under panseret, men det passer mitt formål.

Svarte 08/08/2008 kl. 04:18
kilden bruker

stemmer
0

Jeg fant faktisk begge disse linkene du følger, men som nevnt de er ganske enkelt å beskrive problemet, ikke løse det. Forfatteren av bloggen foreslår en midlertidig løsning ved å bruke en annen Visningsstatusen leverandør, men dessverre det er ikke en mulighet i dette tilfellet ... Jeg trenger virkelig å forlate opplysningene i Visningsstatusen alene og bare hekte på hva som blir gjort ut av boksen.

Svarte 05/08/2008 kl. 14:54
kilden bruker

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