ASP.NET "Please wait"

Tags:    asp.net c#

Lidt pinligt når jeg nu er C# udvikler, men jeg kan ikke finde få dette til at virke, selvom jeg har fundet mange lignende problemstillinger på Google.

Jeg har en asp.net side som loader mange data. Det tager ca. 2 minutter, før siden vises. Jeg vil gerne have en såkaldt "spinner" gif til at køre mens data loades.

For at holde det simpelt, har jeg lavet dette eksempel:

Fold kodeboks ind/udCSharp kode 


og min code-behind:

Fold kodeboks ind/udCSharp kode 


Alle eksempler jeg har fundet på nettet fungerer ved at man klikker på en knap og så laves der noget med enten AJAX eller jQuery. Men jeg vil have at den skal vise min "LoaderDiv" lige når siden vises og fjerne den igen, når LoadData() er eksekveret.

Hvad gør jeg og jeg vil helst bruge jQuery hvis muligt?




9 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 34 karma
Sorter efter stemmer Sorter efter dato
Jeg vil anbefale dig at lave en webservice der returner resultatet fra din LoadData() metode (Eller blot flytte din metode).

Det vil sige følgende skal ske:
1) document.ready køres når siden indlæser
2) En spinner bliver vist
3) Efterfølgende bliver der kaldt en webservice fra document.ready der returnerer det data du skal bruge
4) Når webservicen er færdig med dens arbejde (Se http://stackoverflow.com/questions/861784/how-to-call-a-web-service-from-jquery) skjuler du din spinner og indsætter resultatet

Jeg vil anbefale dig at bruge json som data format (Både når du sender og henter data).

EDIT: Blot fordi jeg kedede mig lavede jeg lige et eksempel til dig

http://peecee.dk/upload/download/403655

Jeg brugte en scriptmanager da jeg synes den er nemmere og arbejde, men du kan selvfølgelig bruge et normalt ajax kald.



Indlæg senest redigeret d. 04.03.2013 19:36 af Bruger #11386
Dit problem er at du er nødt til at gøre det med AJAX! Problemet ligger i at siden ikke vises før den er helt loaded. Og den bliver først loaded efter du har hentet alt dit indhold., dvs. din animation vil først køre EFTER LoadData();

Den bedste måde (nemmeste) er at lave en "usynlig" side som genererer den HTML du skal vise. Så loader du den via JQuery ind i et <div> tag - det er den eneste måde du rigtig kan gøre det på.





Hvis det er et nyt projekt du er igang med så prøv at overveje at lave det i MVC. Fordelen er at du kan lave actions som du nemt kan kalde fra jQuery/AJAX og returnere noget json data.

Hvis du skal have gang i AJAX og jQuery skal du ikke returnere noget til din side som du normalt vil.
Det eneste du skal returnere er dit script der skal initiere at hente dine data via AJAX og jQuery.
Således du returnerer en tom side, som starter dit jQuery script som viser div'en med en spinner på, starter dit ajax-kald der opdaterer din side, og derefter skjuler din spinner igen.



Tak for jeres input. Det er noget gammel kode som skal optimeres / gøres mere brugervenligt, så MVC vejen er ikke mulig, med mindre at jeg får accept til at starte helt forfra (det gør jeg ikke).

@Brian: Nej, cyklus for sideopbygning er svær at komme uden om. Tak for input.

Og fedt med dit eksempel Casper, det kan selv jeg forstå :-) Jeg tror jeg vil forsøge at implementere det efter din metode, selvom det kræver en anelse ommøblering i den gamle kode som jeg er fjerde generation som overtager nu :-)



Hey mr webcontrol, kender du <asp:UpdatePanel /> og <asp:UpdateProgress /> ?


http://www.asp.net/AJAX/Documentation/Live/tutorials/IntroductionUpdateProgress.aspx

Vh
/J



Hey mr webcontrol, kender du <asp:UpdatePanel /> og <asp:UpdateProgress /> ?


http://www.asp.net/AJAX/Documentation/Live/tutorials/IntroductionUpdateProgress.aspx

Vh
/J


Nu ved jeg ikke hvem du kalder Mr. Webcontrol :-) :-)

Men jeg kender det godt. Men at skulle bygge det ind i noget gammel eksisterende kode er ikke nødvendigvis en triviel opgave.



Ja okay, kender ikke setuppet, men det er vel bare updatepanel.update() i stedet for loadData() i pageload, smid så loadData i updatepanelet. men det kræver vist også en .net version > 2



Ja okay, kender ikke setuppet, men det er vel bare updatepanel.update() i stedet for loadData() i pageload, smid så loadData i updatepanelet. men det kræver vist også en .net version > 2


Kan man overhovedet få ASP.NET webforms til mindre end 2.0?
Mener da ikke at det var med i .NET 1.1?



Nej webforms har vist altid været der, at langt de fleste er gået over til mvc/razor er en anden sag.

Jeg mente også en .net version over 2. Altså 3.5/4 for at få webcontrols som updateprogress mm.

Venligst



Indlæg senest redigeret d. 08.03.2013 11:52 af Bruger #5789
t