[C# ASP.NET] Page flushing met lang uitvoerend C# script

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 12:39
In mijn ASP.NET C# web applicatie heb ik een functie die een paar lang durende SQL queries uitvoert. Het laden van die pagina duurt iets van 2 tot 4 seconden afhankelijk van ingevoerde parameters.
De betreffende pagina maakt gebruik van een MasterPage.
Ik wil dus graag dat die pagina bijv een loading message laat zien terwijl die pagina laadt. Dat krijg ik echter maar niet voor elkaar, heb al diverse zaken geprobeerd met Response.Buffer, Response.Flush, Response.BeginFlush, Page_Load, Page_LoadComplete etc geprobeerd maar de pagina blijft wit en wordt pas gevuld zodra het script klaar is.
Via Google vind ik meerdere manieren maar geen van allen lijkt te werken.

Of is de enige goede manier dit met Ajax en JS PageLoad scripts te doen?

Alle reacties


Acties:
  • +1 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 08:56
Daar zal je wat front-end technieken voor moeten gebruiken. Zomaar een idee:
  1. Maak een pagina die het resultaat gaat tonen (maar nog niet heeft) en daarbij je loading-message laat zien.
  2. Haal met Javascript de gegevens op via een API die JSON teruggeeft (super makkelijk in ASP.NET).
  3. Zodra de gegevens na die 2-4 seconden binnen zijn, vul je de gegevens in op de pagina (via Javascript) en haal je de loading-message weg.
Uiteraard kun je ook uitwijken naar volledige front-end frameworks (Angular, Vue, React, ...), maar bovenstaande werkt ook (en is wellicht zelfs nog leuker om te doen?)

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Flushen zou moeten werken, dat deed het vroeger in ieder geval gewoon. Het kan echter best zo zijn dat browsers (of alleen de jouwe) tegenwoordig wachten tot de hele content binnen is voordat ze dingen gaan weergeven. Als je met iets als telnet ofzo probeert de pagina op te halen, zie je dan ook dat je output direct gestuurd wordt wanneer jij de flushes geeft, of komt alles in een keer? Dan weet je in ieder geval of het serverside goed werkt of niet.

Acties:
  • 0 Henk 'm!

  • Marber
  • Registratie: Juni 2014
  • Laatst online: 19-09 09:10
Dit is wel heel lang geleden voor mij /disclaimer

Heb je als eerste regel in je code de response.buffer op false gezet? (https://docs.microsoft.co...6.0-sdk/ms526001(v=vs.90))

En wat gebeurt er als je het probeert zonder masterpage (kan zo maar zijn dat je HTML structuur er voor zorgt dat de browser wacht tot hij verder kan met renderen... (probeer hetzelfde anders eens in een leeg C# .net project)

Acties:
  • 0 Henk 'm!

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 12:39
Thanks! Kom er zsm even op terug, bedankt zover. Had idd wel geprobeerd response.buffer op zowel true als false te zetten. De een zegt true de ander zegt false...

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zonder een klein voorbeeld is er niet heel veel te zeggen over wat je fout doet. Grote kans is dat je de data al ophaalt voordat er überhaupt begonnen wordt met renderen van de pagina.

Maar sowieso zou ik niet voor de oplossing kiezen waar je afhankelijk bent van het eerder sturen van een deel van de HTML, dat is lastig om goed te krijgen, want zoals al gezegd kan het best zijn dat de browser pas gaat renderen als hij een well-formed html pagina heeft. Een veel betere oplossing is om gewoon een snelle pagina te maken die daarna d.m.v. een seperaat request de data ophaalt en toont. Je kunt dat volledig doen d.m.v. client side rendering, of gewoon een partial view maken, die je in de dom invoegt.

[ Voor 8% gewijzigd door Woy op 05-08-2020 09:09 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1