Skulle vilja visa en bild då sidan ladda och då sidan är färdig laddad dölja bilden. Får du nog lösa på något annat sätt. När sidan laddas innebär det ju att du skickar en fråga till servern, som sen spottar tillbaka ett svar i html. Det innebär att du inte kan se bilden medans sidan laddas. Du får titta på något annat språk då. jag ställde samma får för ett tag sen men det ända du kan göra är att gå till en ny sida som visar bilden och som gör anropet till sidan. Om du vill fördröja den så bilden så den sysns längre kan du använda <META HTTP-EQUIV="Refresh" CONTENT="2; URL=autoforward_target.aspx> där CONTENT="2 är antal secunder sidan skall visas innan den går vidare. Du kan göra såhär: Mnja... det är inte riktigt lika lätt som i ASP... där man mara kund flasha den del och sedan skriva resten sen... Hmmm.. jag funderade lite på detta och kom fram till att man kanske kunde överlagra page-rendermetod.Visa bild då sidan laddas.
var gör jag detta bäst i pre_render eller page_load?Sv: Visa bild då sidan laddas.
Sv: Visa bild då sidan laddas.
Sv:Visa bild då sidan laddas.
Lägg hela sidan i t.ex. en div-tagg. Den div-taggen samt din bild ligger direkt under body-taggen. Låt båda två ta 100% av sidan. Sätt display: none på div-taggen. Längst ner på sidan har du en liten script-tagg (precis innan </body>) där du ändrar display: för både bilden och div-taggen så att endast div-taggen syns. Det borde ge den här effektenSv: Visa bild då sidan laddas.
i .Net måste du rensa bort all kod i client-side sidan, fläska ut koden med response.write och köra lite flush... Response.Flush();
ploppa ut lite mer kod och sedan köra flush igen...
Tyvärr så har du inte tillgång till några kontroller etc, å inte har du någon fint Form heller... å vill du ha det så får du göra som de tidigare har nämnt...Sv:Visa bild då sidan laddas.
Så jag kollade lite på hur den funkar och det visade sig att den använder basklassens render (från Control) som i sin tur anropar sin egen RenderChildControls...
RenderChildControls i sin tur renderar bara alla kontroller... hmmm... så om jag gör samma sak. fast pausar lite i renderingen av kontrollerna, å i pausen så kan jag göra en massa jobbiga saker...
å så var det.
Koden för det hela är här:
protected override void Render(HtmlTextWriter writer) {
System.Collections.ArrayList controls = new System.Collections.ArrayList();
int count = this.Controls.Count;
for (int i = 0; i< count; i++) {
if (i==0) {
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.TextWriter sw = new System.IO.StringWriter(sb);
HtmlTextWriter dummy = new HtmlTextWriter(sw);
this.Controls[i].RenderControl(dummy);
Response.Write(sb.ToString());
// write the waiting....
WriteMessage();
Response.Flush();
// Do heavy work...
DoHeavyWork();
}
else {
controls.Add(this.Controls[i]);
}
}
// Now render the rest of the controls in order.
System.Text.StringBuilder sb2 = new System.Text.StringBuilder();
System.IO.TextWriter sw2 = new System.IO.StringWriter(sb2);
HtmlTextWriter dummy2 = new HtmlTextWriter(sw2);
for (int i=0; i< controls.Count; i++) {
((Control)controls[i]).RenderControl(dummy2);
}
Response.Write(sb2.ToString());
// base.Render (writer);
}
private void WriteMessage() {
Response.Write("MOahahahahaha!!!");
}
private void DoHeavyWork() {
System.Threading.Thread.Sleep(4000); // sleep is work at the moment.
}
Så istället för att göra alla jobbiga saker i Page_Load så får man göra dom i DoHeavyWork()...
Lycka till!
Kul va?
/Mattias