Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 10:54 Der er 20 kommentarer og
1 løsning

Replace output så sent som muligt

Når brugeren ser min aspx med tilhørende webcontrols og usercontrols på, vil jeg i allersidste øjeblik hente den genererede html ud og foretage nogle småændringer til den.

Hvordan?
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 10:58 #1
Jeg har fundet PreSendRequestContent-eventen som ser lovende ud. Hvordan tilgår jeg den?
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 11:07 #2
Ok, det er en public event på HttpApplication.

Er der nogen der kan bekræfte eller afkræfte at det er den rigtige event at tilgå, eller er der en anden måde at løse problemet på, som kan anbefales?
Avatar billede burningice Nybegynder
11. januar 2005 - 14:08 #3
UpdateRequestCache er vel det sidste event hvor du har mulighed for at ændre noget, da cachen herefter vil blive opdateret og requestet sendt afsted.

I følge sdk'et sker rækkefølgen på denne måde

An application executes events that are handled by modules or user code defined in the global.asax file in the following sequence:

BeginRequest

AuthenticateRequest

AuthorizeRequest

ResolveRequestCache

[A handler (a page corresponding to the request URL) is created at this point.]

AcquireRequestState

PreRequestHandlerExecute

[The handler is executed.]

PostRequestHandlerExecute

ReleaseRequestState

[Response filters, if any, filter the output.]

UpdateRequestCache

EndRequest
Avatar billede burningice Nybegynder
11. januar 2005 - 14:10 #4
ang. PreSendRequestContent vil jeg mene at det bliver noget snask at ændre output her, da det så ikke vil stæmme over ens med RequestCachen
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 14:11 #5
Jeg forstår ikke årsagen til at det vil være noget snask.
Avatar billede snepnet Nybegynder
11. januar 2005 - 14:54 #6
hvad er det for ting du har behov for at ændre ?
(der er sansynligvis andre måder at gøre det på)

men bortset fra det, så vil du kunne gøre den slags ting i OnRender... Det er den metode der skriver html-en ud til din output-buffer.

mvh
Avatar billede snepnet Nybegynder
11. januar 2005 - 15:02 #7
Du kan overskrive render sådan her :

protected override void Render(HtmlTextWriter writer)
{
  // basens implementering er self. den der køres normal
  base.Render (writer);
}

mvh
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 15:14 #8
Hvordan tilgår jeg så html'en og ændrer på den fra Render-metoden?
Avatar billede snepnet Nybegynder
11. januar 2005 - 15:15 #9
Du kan lige få et eksempel til inspiration her :

protected override void Render(HtmlTextWriter output)
{
    StringWriter someStringWriter = new StringWriter();         
    HtmlTextWriter preparedOutput = new HtmlTextWriter(someStringWriter);
    base.Render(preparedOutput);
    string completeHtml = someStringWriter.GetStringBuilder().ToString();
    output.Write(completeHtml);
}

Ovenstående tager så bare og skriver det ud der skulle være skrevet ud i forvejen, men jeg håber du kan se mulighederne for manipulering.

mvh
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 15:20 #10
Tjah, jeg skal vel lægge det i completeHtml som jeg vil have brugeren skal se. Jeg kan dog ikke lige se hvordan jeg får det frem som
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 15:20 #11
hov hov, Eksperten, jeg var ikke færdig med at skrive. Her kommer hele kommentaren:

Tjah, jeg skal vel lægge det i completeHtml som jeg vil have brugeren skal se. Jeg kan dog ikke lige se hvordan jeg får det frem som ellers ville være skrevet ud til brugeren. Kan jeg finde det inde i output-parametren?

Og er det HELE indholdet? Altså inklusive alle usercontrols osv.
Avatar billede snepnet Nybegynder
11. januar 2005 - 15:20 #12
den sidste linie - output.Write(compleHtml) smider det ud til klienten.
mvh
Avatar billede snepnet Nybegynder
11. januar 2005 - 15:25 #13
hehe.... det gik lidt koks i det der :o)

Ja - det er hele dit output der ligger der, og det er output.Write(completeHtml) der sørger for at smide det ud til klienten (den med compleHtml var lige en smutter :o)

mvh
Avatar billede nielsbrinch Nybegynder
11. januar 2005 - 15:28 #14
Er det muligt at overskrive Render helt generelt på alle sider, uden de enkelte sider overhovedet behøver ane noget om det. F.eks. gennem mit hjemmelavede HttpModule som i forvejen kan tilgå de events der er på HttpApplication.
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:35 #15
Tak for hjælpen. Læg et svar.
Avatar billede snepnet Nybegynder
15. januar 2005 - 15:36 #16
det var så lidt - håber det "holder hjem" :o)
mvh
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:38 #17
Jeg havde i praksis brug for en løsning der kunne gøre det generelt i en hel applikation - altså helst gennem et HttpModule ... den holder ikke helt hjem.

Men jeg skulle nok selv have været mere klar over hvad det var jeg ville have, da jeg stillede spørgsmålet.
Avatar billede snepnet Nybegynder
15. januar 2005 - 15:40 #18
hov for hulen... den har jeg misset - undskyld :o(

kan du ikke bare lave en baseklasse der implementerer metoden, og så sørge for at dine pages arver fra den ? - er det ikke lige så snildt... du skal stadig kun skrive det én gang.

mvh
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:41 #19
Det skal kunne kobles på applikationer uden applikationerne skal ændres. Der skal ikke ændres på de enkelte aspx'er eller deres codebehind'er.
Avatar billede snepnet Nybegynder
15. januar 2005 - 15:44 #20
oki - så er der dømt pas lige nu, men jeg har noteret det, og skal nok skrive det her hvis jeg finder ud af noget.
mvh
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:46 #21
Rigtig lækkert, tak.
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