De volgorde waarin events uitgevoerd worden bij het laden van elke pagina noemen we de life cycle:
| Event | Omschrijving |
|---|---|
| Page Setup | Hier wordt een tree van controls opgebouwd en gedetecteerd waarom de pagina moet uitgevoerd worden: een normaal request, een postback, een cross-page postback of een callback. De collectie gegevens ontvangen via POST of GET wordt voorbereid. Na deze stap kunnen we op events sturen naar de eventhandlers in de broncode. |
| PreInit | Geïntroduceerd in ASP.Net 2.0: het beginpunt in de levenscyclus van een pagina. Wanneer dit event wordt uitgevoerd zijn nog geen masterpage of theme geassocieerd. De scroll-positie is gekend, geposte data is beschikbaar en de controls werden geïnitialiseerd met de eigenschappen zoals opgegeven in de aspx-broncode. Controls hebben geen ID als dit niet in de aspx-code is opgegeven. Masterpage of theme opgeven is vanaf nu mogelijk via code. IsPostBack, IsCrossPagePostBack en IsCallBack worden hier ingesteld. |
| Init | Masterpage en theme zijn ingesteld en kunnen niet meer worden veranderd. Alle child controls zien hun OnInit methode uitgevoerd. De ViewState is nog niet herzet. |
| InitComplete | Geïntroduceerd in ASP.Net 2.0: controls halen hun ViewState op. Alles wat voor dit event in de ViewState geschreven is zal verloren gaan bij de volgende PostBack |
| PreLoad | Geïntroduceerd in ASP.Net 2.0: enkel voor pagina's: aangeven dat de pagina de systeemniveau-initialisatie heeft voleindigd en nu de aandacht kan geschonken worden aan de gebruikerscode |
| Page_Load | Eerst uitgevoerd voor de pagina, daarna voor alle controls. Wanneer de pagina geladen is, de __Viewstate is nu volledig geladen en kan zonder probleem benaderd worden. |
| PostBack afhanelen | Het PostBack-mechanisme is het hart van ASP.Net programmeren. Het bestaat uit het versturen van formuliergegevens naar dezelfde pagina en het gebruiken van de viewstate om de oproepcontext te construeren. |
| Control Event | Wanneer een control een event heeft geraised, zoals wanneer een druk op een knop de pagina heeft herladen |
| LoadComplete | Geïntroduceerd in ASP.Net 2.0: enkel voor de pagina: duidt het einde aan van de paginavoorbereidingsfase, hierna wordt de pagina afgewerkt: Page Rendering |
| Pagina-afwerking | De pagina is klaar om output naar de browser te sturen |
| PreRender | Pagina's en Controls kunnen hier updates ondergaan vooraleer de output wordt gegenereerd |
| PreRenderComplete | Geïntroduceerd in ASP.Net 2.0: geeft aan dat de PreRender-fase voor alle controls voleindigd is |
| SaveStateComplete | De nieuwe toestand van de controls wordt opgeslagen in de viewstate |
| Page_Unload | Wanneer de pagina uit het server-geheugen wordt gehaald, eerst voor alle controls, daarna voor de pagina. |
De request informatie kan je gebruiken om informatie te weten over de browser, cookie-informatie op te vragen,...
Response.redirect("http://www.ivobrugge.be");
Deze techniek zal vaak aangewend worden wanneer keuzelijsten e.d. gevuld worden met gegevens uit een database. Zo is er slechts één keer een dataconnectie nodig.
IsPostback.aspx ... <form id="form1" runat="server"> <div> <asp:ListBox ID="LBdieren" runat="server" AutoPostBack="True"></asp:ListBox> <br /> <br /> <asp:Label ID="LblKeuze" runat="server" Text="Label"></asp:Label> </div> </form> ... IsPostback.aspx.cs ... protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ArrayList dieren = new ArrayList(); dieren.Add("Kat"); dieren.Add("Hond"); dieren.Add("Aap"); dieren.Add("Ezel"); dieren.Add("Giraf"); dieren.Sort(); LBdieren.DataSource = dieren; LBdieren.DataBind(); } else { LblKeuze.Text = "Je koos een " + LBdieren.SelectedItem.Text; } }
De eigenschap Context bevat alle http-informatie aangaande een http-request. De eigenschap Context bevat een instantie van de klasse System.Web.HttpContext. Dit object heeft een aantal interessante members.
De eigenschap Context kan je gebruiken om informatie bij te houden wanneer de gebruiker naar een andere pagina wordt gestuurd. Niets is vervelender voor jouw als programmeur en voor de gebruiker dat dezelfde informatie meermaals moet worden verstrekt.
| member | omschrijving |
|---|---|
| Session | Bevat een HttpSessionState-object waarmee je informatie van een bepaalde gebruiker (sessie) kan bewaren. Je kan de informatie per gebruiken in key/value paren. |
| Application | evat een HttpApplicationState-object waarmee je informatie voor alle gerbuikers kan bewaren. Je kan de informatie in key/value paren opslaan. |
| Items | Collectie met key/value paren die informatie bewaren van alle componenten die deelnemen in één http-request. Deze collectie is dus slechts gekend gedurende één request van de gebruiker. Met Server.Transfer kan je de gegevens wel meegeven. Klikt de gebruiker echter op een hyperlink of ga je met Response.Redirect naar een andere pagina van de site, dan gaat deze informatie verloren. |
| Handler | Levert je informatie over de pagina die opgevraagd wordt, maar stelt je ook in staat om informatie over de aanvrager op te vragen na bijvoorbeeld Server.Transfer |
| Trace | Geeft je de mogelijkheid het uitvoeren van je toepassing te traceren en te zien waar 'bottlenecks' zich bevinden |
In het bestand Global.asax kan je code schrijven voor onder meer volgende event-handlers:
| event-handler | omschrijving |
|---|---|
| Application_Start | Wordt uitgevoerd wanneer de applicatie wordt opgestart: onze toepassing voorbereiden op het ontvangen van requests, zoals databaseconnecties openen, applicatievariabelen instellen, ... |
| Session_Start | Wanneer een sessie start: een gebruiker betreedt de site |
| Session_End | Een gebruiker verlaat de toepassing |
| Application_End | De applicatie wordt afgesloten |
| Application_BeginRequest | Bij elke request |
| Application_EndRequest | Na elk request |
| Application_Error | Afhandelen van onverwachte fouten |
We maken een aspx pagina waarin we in het Load-event van het formulier een contextitem-, twee sessievariabelen en een applicatievariabele vulllen.
We voorzien ook twee knoppen, bij het klikken op een knop wordt de gebruiker doorgestuurd naar een andere pagina. Het doorsturen gebeurt een keer met Response.Redirect en een keer met Server.Transfer (zie volgend onderdeel in de cursus).
Op de tweede pagina plaatsen we vier labels die de inhoud van deze variabelen moeten tonen. We gaan telkens na of er een fout optreedt.
|
Met Server.Transfer |
Met Response.Write |
Toon /verberg code
Je merkt dat bij het versturen met Response.Write de informatie in contextitems niet meer wordt onthouden.
Uit deze toepassing valt het verschil tussen sessie- en applicatievariabelen niet uit te maken. Onthoud dat sessievariabelen een set variabelen vormen voor elke individuele user, applicatievariabelen vormen een set gemeenschappelijke variabelen voor alle gebruikers.
| member | omschrijving |
|---|---|
| MapPath | Retourneert het fysieke pad op de server van de huidige virtuele map. Kan handig gebruikt worden voor het openen en opslaan van bestanden op de server |
| HtmlEncode | Encodeert een string voor weergave in een browser |
| Transfer | Beëindigt de uitvoering van de huidige pagina en begint de uitvoering van een andere pagina. In tegenstelling tot bij Response.Write kan je na een transfer wel nog aan de elementen van de bronpagina! |
| Execute | Voer een andere pagina uit en ontvang eventueel de gegenereerde output in de huidige pagina |
| MachineName | Retourneert de naam van de servercomputer |
Maak een pagina met daarin een TextBox en een Button. Voorzie in de codebehind-file een property Voornaam.
Bij klikken op de knop voorzie je dat de gebruiker met Server.Transfer wordt doorgestuurd naar een tweede pagina.
Op de tweede pagina kunnen we de inhoud van de TextBox en de waarde van de Property van de eerste pagina opvragen!
Daarvoor gebruiken we de eigenschap Handler van de Context (HttpContext) van de pagina. De ontvangen gegevens typecasten we naar de klasse van de originele pagina.
Een control kunnen we nu vinden met de methode FindControl
Een property kunnen we rechtstreeks aanspreken
De methode Execute staat je toe een externe pagina uit te voeren. Deze pagina kan uitvoercommando's bevatten (controles, wegschrijven in een database, ...), je kan met behulp van een TextWriter ook eventuele respons-informatie van de uitgevoerde pagina opvangen. We geven de opgevraagde waarde weer met behulp van drie Labels.
Toon /verberg
| Directive | Beschrijving |
|---|---|
| @Assembly | Hiermee kan je een assembly in je pagina importeren (.dll-bestand) |
| @Control | Definieert een attribuut specifiek voor een control |
| @Implements | Stelt je in staat een interface in je webpagina te importeren. Hierdoor geef je aan dat je webpagina de in een interface gedefiniëerde eigenschappen, methoden en events zal gebruiken |
| @Import | Hiermee kan je een namespace importeren in de pagina. Dit zorgt ervoor dat alle klassen en interfaces binnen die namespace bruikbaar zijn binnen de pagina. Het .NET Framework importeert standaar een heel aantal namespaces voor jou |
| @Master | Identificeert een Master Page (niet beschikbaar in .Net 1.1) |
| @Outputcache | Hiermee kan je instellen hoe de pagian gecached wordt op de server |
| @Page | Een derictive die we al vaak hebben gebruikt is de @Page directive. Hiermee hebben we een attribuut language ingesteld om aan te geven welke .NET taal we wensen te gebruiken |
| @Reference | Wordt gebruikt om een pagina of user control in de pagina te importeren. Op deze manier wordt de pagina of usrer control runtime gelilnked |
| @Register | Hiermee kan je server controls die je eventueel zelf hebt ontworpen in de pagina importeren met een specifieke tag (prefix en naam) |
| Meer tutorials: |
| leer ook: | html | | xhtml | | css | | asp | | asp.net | | c# | | ado.net | | linq | | ajax | | java | | javascript |