Avatar billede lateralus Nybegynder
24. juli 2006 - 14:01 Der er 5 kommentarer og
1 løsning

Problemer med callback

Halløj eksperter,

jeg har et temmeligt skummelt problem med den usercontrol jeg sidder og udvikler. Jeg benytter callbacks (ASP.NET 2.0) til at hente noget af det data, der præsenteres for brugeren. Dette sker når brugeren klikker på bestemte elementer.

Jeg har implementeret en klasse (DataViewerControl) der implementerer interfacet ICallbackEventHandler. Denne klasse indeholder de metoder der skal tage sig af callback requests. Jeg indsætter efterfølgende javascript-kode på diverse elementer (<img> tags i det her tilfælde), som sørger for at lave de nødvendige callbacks til serveren:

this.Page.ClientScript.GetCallbackEventReference(_dataviewercontrol, "message", "callbackHandler","context","onError",true);

Når man kalder den pågældende side, sørger ASP.NET enginen jo for selv at indsætte en reference til det påkrævede javascript-dokument, der indeholder callback logikken (<script src="WebResource.axd?blablabla">). MEN dette gør den kun første gang man kalder siden! På alle efterfølgende requests bliver referencen til dette javascript ikke indsat, hvilet selvfølgelig medfører at mine callbacks fejler (object not found). Når siden en gang har været kaldt er det nødvendigt at genstarte webserveren før skidtet virker igen! Og det uanset hvilken browser man benytter; hvis jeg eksempelvis laver første request med Internet Explorer, fejler den efterfølgende i Firefox, når jeg prøver at hente selvsamme side her. Dvs. det skyldes ikke noget caching i browseren og det skyldes ligeledes heller ikke kontroller der ikke bliver initialiseret korrekt pga. postbacks.

Det sjove er at hvis jeg implementerer en wrapper-webpart rundt om denne user control og indsætter den i et SharePoint miljø virker det fint - referencen til callback javascript-dokumentet bliver her indsat hver gang uden problemer. Jeg har prøvet at deploye applikationen til en anden maskine (for at udelukke at en buggy IIS/ASP.NET runtime kunne være årsagen), men det er samme resultat på begge maskiner.

Jeg har ligeledes prøvet manuelt at refere til det pågældende javascript-dokument. Omtrent samme resultat: Her bliver referencen selvfølgelig indsat, men den fejler stadig ved andet request med en javascript-fejl: 'theForm is undefined'. Jeg kan se at 'theForm' er en variabel de (Microsoft) definerer i callback scriptet. Jeg kan simpelthen ikke se at at der noget forskel i output på første og andet request. Jeg har prøvet at debugge igennem applikationen og den kører igennem applikationen på nøjagtig samme måde hver gang.

Jeg ved ikke rigtig om det hjælper at poste min kode (der er temmelig meget - mere end der lige kan overskues ved at poste det her). Den overordnede struktur kan dog beskrives således:

Applikationen består af en række indlejrede usercontrols (6 niveauer i alt). Hver usercontrol er mere eller mindre ens i virkemåde: Load data via et manager-objekt og rendér data sammen med alle childcontrols. Al data renderes fint uden problemer. Kald af callbacks ligeså. Det eneste der ikke virker er altså referencen til callback-javascriptet.

Er der nogen herinde der har haft tilsvarende problemer med callbacks og manglende reference til callback-scriptet???
Avatar billede mrbonus Novice
25. juli 2006 - 15:11 #1
Det lyder grangiveligt som om at du har noget af din kode til at køre i en

if not Me.isPostBack Then

' noget kode

end if

Kode der er herinde i bliver kun udført foørste gang siden loades, ved alle callbacks vil koden ikke blive udført, og hvis javascriptet bliver sat på der, forklarer det problemet
Avatar billede lateralus Nybegynder
25. juli 2006 - 15:23 #2
Ja, jeg giver dig ret - det lyder meget som et postback-issue, men det er det ikke. Jeg overskriver ikke Page_Load() metoden i nogle af mine kontroller og jeg laver ligeledes ikke et check på PostBack nogle steder (der bliver slet ikke lavet nogle postbacks til kontrollerne - kun callbacks).

Men som jeg nævnte i mit oprindelige indlæg, så virker det fint i en wrapper-webpart og det virker også fint som "almindelig" usercontrol første gang. Hvis det virkelig var et postback problem ville det ikke give nogen mening at jeg kan hente siden korrekt i eksempelvis IE og den derefter fejler i Firefox - i det tilfælde kan der ihvertfald ikke være tale om postback, når jeg bruger to forskellige browsere.

Jeg er ved at rive håret ud af hovedet på mig selv over det her problem. Hvis der er andre der har nogle kommentarer skal de være mere end velkomne...
Avatar billede mrbonus Novice
25. juli 2006 - 15:39 #3
Ja det lyder jævnt langhåret, og jeg har ikke flere bud, da jeg nok skulle sidde og pille ved projektet, for at få en ide om det. desværre.
Avatar billede snepnet Nybegynder
25. juli 2006 - 21:57 #4
Kan du poste et illustrerende eksempel vil kan smide ind i et projekt?
Mvh
Avatar billede lateralus Nybegynder
26. juli 2006 - 10:19 #5
Jeg fandt en workaround til problemet: Jeg refererer manuelt til callback-scriptet og sørger selv for at kalde InitCallback() metoden og sætte diverse javascript-variabler, der skal bruges. Nu virker det hver gang.
Avatar billede lateralus Nybegynder
26. juli 2006 - 10:19 #6
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester