Avatar billede speedpete Nybegynder
28. februar 2005 - 23:07 Der er 7 kommentarer og
1 løsning

Overbliksartikel om SDK og eksisterende metoder

Hej,

er der nogen der kender en overbliksartikel, som på en rimelig forståelig måde, med udgangspunkt i klassen Page, forklarer hvilke metoder man har at arbejde med - altså som er arvet fra de klasser som Page stammer fra.
Jeg tænker på at man har Page_Load, Page_Init ... hvad er den komplette liste, og hvornår skal man bruge dem?
Avatar billede snepnet Nybegynder
28. februar 2005 - 23:25 #1
Det her er i hvert fald et godt sted at starte :

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconControlExecutionLifecycle.asp

(Page er en specialisering af TemplateControl, som igen er en specialisering af Control).

Mvh
Avatar billede speedpete Nybegynder
01. marts 2005 - 09:27 #2
ok, tak, men jeg er stadig forvirret... på den side du angiver kan jeg finde noget om "Load event(OnLoad method)", men ikke noget om "void Page_Load (Object obj, EventArgs e)", som står i den kode jeg selv skriver? Hvad er sammenhæmgen her? er der i Page en forudprogrammeret metode Page_Load, som tager sig af eventen Load?
Avatar billede snepnet Nybegynder
01. marts 2005 - 19:05 #3
jeg kan godt forstå du er lidt forvirret .... det er ikke lige gennemskueligt alt sammen desværre :o(

mth page_load, så vil du - hvis du bruger visual studio - kunne se hvorfor den bliver kaldt.
som standard vil den code-behind fil vs laver til dig indeholde følgende (eksempel i C#) :

override protected void OnInit(EventArgs e)
{
    InitializeComponent();
    base.OnInit(e);
}

private void InitializeComponent()
{   
    this.Load += new System.EventHandler(this.Page_Load);
}

altså... OnInit overskrives, og i den kalder så en metode der sørger for, at der hookes op på Load-eventet, og at eventet håndteres af Page_Load.

bruger du derimod webmatrix ... eller bare notepad vil du nok have fundet ud af, at det ikke er nødvendigt at gøre tingene på samme måde som visual studio.
hvis du ikke angiver noget som helst - kaldes din page_load faktisk alligevel, hvilket skyldes at frameworket sørger for noget tilsvarende det kode jeg har vist bliver udført.

du kan prøve det af selv på følgende måde :

1) kommentér ud som vist :
private void InitializeComponent()
{   
    // this.Load += new System.EventHandler(this.Page_Load);
}

ovenstående vil gøre, at din Page_Load IKKE bliver kaldt (stadig forudsat at du bruger en vs-template), men hvis du i din aspx-fil sørger for at ændre følgende :
<%@ Page language="c#" Codebehind="speedpete.aspx.cs" AutoEventWireup="false" Inherits="EXP2.speedpete" %>

Til :
<%@ Page language="c#" Codebehind="speedpete.aspx.cs" AutoEventWireup="true" Inherits="EXP2.speedpete" %>

vil frameworket så sørge for at fikse det.

// AutoEventWireup er default true - så du kan sådan set fjerne den fra dit pagedirective hvis du ønsker at have den true.

håber du kunne bruge det til et eller andet :o) (ellers må du råbe op).

mvh
snep
Avatar billede speedpete Nybegynder
01. marts 2005 - 21:21 #4
Jo, det lysner da :-) Nu vil jeg prøve at nærlæse specifikationen af Page (properties, methods, events), og se om jeg får et overblik ud af det.

Vil du ikke have nogen points?
Avatar billede snepnet Nybegynder
01. marts 2005 - 21:53 #5
det kan være praktisk med den den indbyggede tracer når du kigger på den slags... har du prøvet den ?
mvh
Avatar billede speedpete Nybegynder
01. marts 2005 - 23:13 #6
Har ikke prøvet tracer; hvordan?

Et par uddybende sprgsml (jeg bruger webmatrix / C#):

AutoEventWirup er som standard true, fordi frameworket selv laver Page_Load og lignende for eventsne - men VS sætter den false, fordi VS selv laver Page_Load o.l.?

Er det korrekt forstået at OnLoad fyrer eventen Load, og at den event så skal håndteres? Kan man kalde den noget andet end Page_Load (Mortensen, f.eks.)?

Hvorfor have besværet med Page_Load - kunne man ikke ligesågodt overskrive OnLoad?

Og endelig: "Hvem" kalder OnInit, OnLoad, o.s.v.? Altså styrer lifecycle'n?
Avatar billede snepnet Nybegynder
02. marts 2005 - 00:07 #7
hehe.... ja hvis du hooker det op som visual studio kan du godt kalde den Mortensen :o)
(og ja ... det er korrekt forstået at OnLoad fyrer eventen Load).

Dette her vil virke fint :

// i dit pagedirective
AutoEventWireup="false"

// og i noget codebehind
private void Mortensen(object sender, System.EventArgs e)
{
    Response.Write("Mortensen");
}

override protected void OnInit(EventArgs e)
{
    InitializeComponent();
    base.OnInit(e);
}

private void InitializeComponent()
{   
    this.Load += new System.EventHandler(this.Mortensen);
}

det eneste du sådan set gør er bare at kalde en metode med et andet navn - på det tidspunkt hvor page_load normalt vil blive kaldt.

...

trace... Det er en facilitet som kan give dig lidt (meget) info om de sider du genrerer.

i din web.config (under sektionen <system.web>) kan du f.eks. skrive :
<trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />

når du så har kørt en side fra dit site - kan du se dit trace ved at kalde :
http://<host>/<site>/Trace.axd

du kan lege lidt med parametrene så de passer til det du vil have... hvis du f.eks. tester dine løsninger på en anden server - er localOnly="true" nok ikke det bedste.

Du kan også selv skrive til dit trace ved :
Trace.Write("Kategori","besked");

du kan læse lidt mere om autoeventwireup her :
http://www.codeproject.com/aspnet/AutoEventWireup.asp

og jo - du kan godt skrive kode som denne istedet :
protected override void OnLoad(EventArgs e)
{
    base.OnLoad (e);
    Response.Write("test");
}

du kan læse en diskussion om det her, hvor der også er link til lidt på msdn, hvor en overskrivning af OnLoad anbefales af performancemæssige hensyn (frem for autoeventwireup="true".

http://dotnetjunkies.com/WebLog/nicolai/archive/2004/10/05/27676.aspx

her er også et link vedrørende det du har spurgt om (vedrørende Page/Control lifecycle) :
http://www.15seconds.com/issue/020102.htm

hvem der kalder - tjah... Control er jo basen for alle web-kontroller (som en Page jo så også arver fra i andet led), og det er i den klasse at OnInit og OnLoad er defineret, og det er så også en forekomst af den klasse der vil kunne fortælle om den er igang med det ene eller det andet - hvilket den så gør opmærksom på.
Meeeenn... som udgangspunkt skal man sjældendt regne med, at kunne luske alle detaljer omkring implementering af det ene og det andet i et givent framework ud af leverandøren ;o)

håber du kunne bruge lidt af det til noget.

mvh
Avatar billede speedpete Nybegynder
03. marts 2005 - 11:21 #8
Jo tak, nu vil jeg prøve at eksperimentere lidt med trace...
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