Je kunt gegevens via een website versturen met behulp van formulieren. In HTML zijn er speciale tags om formulieren aan te maken. Deze elementen heb je al leren kennen in de cursus HTML, en kan je met ASP.NET blijven gebruiken. Daarenboven levert ASP.NET extra controls om formulieren af te handelen. Deze controls zijn een stuk krachtiger dan de gewone HTML-elementen, je kunt met de ASP.NET controls bijvoorbeeld informatie onthouden wanneer een pagina herladen wordt (wat stond er in een tekstvak, welke keuze werd in een keuzelijst gemaakt,…). In klassieke ASP moet je er steeds met eigen code voor zorgen dat bij het herladen deze elementen opnieuw gevuld worden.
De ASP.NET code die in dit hoofdstuk wordt behandeld dient enkel tot doel begrip te hebben van formulieren en formulierafhandeling. De code zal hierbij niet steeds uitvoerig worden uitgelegd, maar komt in latere hoofdstukken aan bod.
HTTP is een statusloos (stateless) protocol. HTTP weet dus niet of de HTTP request een alleenstaand bericht is of deel uit maakt van een grotere 'conversatie'. Het Internet zou heel log en traag worden mocht met een protocol worden gewerkt dat steeds alle verlopen aanvragen en connectie-eigenschappen bijhield. HTTP staat dus enkel in voor het leveren van een request bij een server en het terugbrengen van een response. HTTP kent ook geen prioriteiten en behandelt dus elke aanvraag als even belangrijk (een kwaadaardig programma kan dus 1000 keer per minuut een serveraanvraag doen, alle aanvragen worden gelijkwaardig behandeld).
Wanneer een request bij een server wordt ingediend bevat dit heel wat meer informatie dan enkel de gewenste URL. Ook de response van de server kan heel wat meer bevatten dan enkel de gewenste webpagina. Van deze functionaliteiten kan je handig gebruik maken met ASP.NET.
Veel van deze extra informatie wordt automatisch door browser en server verstuurd, de gebruiker hoeft er zich dus niet om te bekommeren. Een HTTP request en een HTTP response bestaat in feite uit drie delen:
| Http Request | |
|---|---|
| Request Line | Een HTTP-commando
Pad en bestandsnaam Versienummer van HTTP Vb. : GET/Testpagina.htm HTTP/1.1 |
| Http header | Gegevens over het browsertype, tijd, taalinstellingen, ... |
| Http body | Data die een gebruiker wenst mee te delen aan de server. Hier zit de informatie die via formulieren met de methode "POST" wordt verstuurd. De methode GET gebruikt de querystring als deel van de URL. Meer hierover verder in de cursus. |
| Http Response | |
|---|---|
| Response Line | Versienummer van HTTP
Een statuscode die succes of mislukking van het request aanduidt Vb. : HTTP/1.1 200 OK |
| Http header | Gegevens over het servertype, tijd, ... |
| Http body | HTML en andere client-side code (vb. Javascript) |
<html>
<head>
<title>Formulier : GET</title>
</head>
<body>
<form action="volgende.aspx" method="get">
Geef je naam in :
<input name="naam" type="text"><br/>
<input type="submit" value="Verstuur">
</form>
</body>
</html>
Druk op de verstuurknop:
Je krijgt een foumelding! Dit is normaal in dit voorbeeld.
Belangrijk is echter een kijkje te nemen in de adresbalk. Je merkt dat in de adresbalk de informatie die je in het formulier hebt ingevuld te lezen is. De informatie is voorlopig echter nutteloos. De formulierinformatie werd, gekoppeld aan de url, verstuurd naar de webserver wanneer de gebruiker op de verstuurknop drukte.
De webserver gaat op zoek naar de pagina die in het action-attribuut van de form-tag was vermeld. Aangezien de pagina volgende.aspx niet bestaat krijgen we een foutmelding. Een browser handelt formulierinformatie niet zelf af, deze afhandeling gebeurt op de server.
We maken nu de pagina waarop de formulierafhandeling moet gebeuren :
volgende.aspx
<%@ Page Language="C#" %>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e) {
Bericht.Text = "Welkom in de cursus ASP.net, " +Request.QueryString["naam"] +"!";
}
</script>
<html>
<head>
</head>
<body>
<asp:Label id="Bericht" runat="server">Label</asp:Label>
</body>
</html>
De opdracht Request.Querystring["naam"] in volgende.aspx zorgt ervoor dat op de server de querystring gelezen wordt en de waarde gekoppeld aan het veld naam wordt opgehaald.
Deze waarde wordt in een zin geplaatst en daarna op het scherm gezet in een label.
Bekijk de broncode van deze pagina:
Zoals je ziet is alle ASP.NET code verdwenen. De server heeft de code uitgevoerd en HTML-output gegenereerd.
formpost.html <html> <head> <title>Formulier : POST</title> </head> <body> <form action="volgende2.aspx" method="post"> Geef je naam in : <input type="text" name="naam" /> <br /> <input type="submit" value="Verstuur" /> </form> </body> </html>
volgende2.aspx
<%@ Page Language="C#" %>
<script runat="server">
private void Page_Load(object sender, System.EventArgs e) {
Bericht.Text = "Welkom in de cursus ASP.net, " +Request.Form["naam"] +"!";
}
</script>
<html>
<head>
</head>
<body>
<asp:Label id="Bericht" runat="server">Label</asp:Label>
</body>
</html>
Deze formulierelementen ondersteunen nog andere attributen, de INPUT-tag kent bv. de attributen name, type, value en checked.
In de voorbeelden op de vorige pagina's heb je reeds een tekstbox leren gebruiken. Algemeen werken deze formulierelementen als volgt :
Bij versturen van het formulier (drukken op de submit-button) wordt de pagina die in het action-attribuut van de form-tag staat, opgevraagd. Aan deze pagina worden de namen en waarden (name=value pairs) doorgegeven via de querystring (methode GET) of de request-body (methode POST). Als je formulieren wenst af te handelen op de server geef je dus de elementen een naam (name) en een waarde (value).
formulierelementen.aspx
<html>
<head>
</head>
<body>
<form action="gegevens.aspx" method="post">
<p><strong>Gelieve volgende gegevens in te vullen :</strong></p>
<table width="300">
<tr>
<td>Naam :</td>
<td><input name="naam" type="text" /></td>
</tr>
<tr>
<td>Paswoord :</td>
<td><input name="pwd" type="password" /></td>
</tr>
<tr>
<td>Gebruik :</td>
<td>
<input name="gebruik" type="checkbox" " value="T" checked />Thuis
<input name="gebruik" type="checkbox" " value="W" />Werk
<input name="gebruik" type="checkbox" " value="S" />school
</td>
</tr>
<tr>
<td>Geslacht :</td>
<td>
<input name="gesl" type="radio" value="V" checked />Vrouw
<input name="gesl" type="radio"" value="M" />Man
</td>
</tr>
<tr>
<td>Niveau :</td>
<td>
<select name="niv" size="3">
<option value="1" selected>Beginner</option>
<option value="2">Geoefend</option>
<option value="3">Geavanceerd</option>
</select>
</td>
</tr>
<tr>
<td>Opmerkingen :</td>
<td>
<textarea name="opm">Tik hier je opmerkingen</textarea>
</td>
</tr>
<tr>
<td><input type="reset" value="Reset" /></td>
<td><input type="submit" value="verstuur" /></td>
</tr>
</table>
</form>
Om de formuliergegevens af te handelen maken we de pagina gegevens.aspx, deze naam werd opgegeven in het action-attribuut van bovenstaand formulier.
gegevens.aspx
<%@ Page Language="C#" %>
<html>
<head>
<title>Gegevens</title>
</head>
<body>
Uw gegevens :
<table>
<tbody>
<tr>
<td>
Naam :</td>
<td>
<%= Request.Form["naam"] %></td>
</tr>
<tr>
<td>
Paswoord :</td>
<td>
<%= Request.Form["pwd"] %></td>
</tr>
<tr>
<td>
Gebruik :</td>
<td>
<%= Request.Form["gebruik"] %></td>
</tr>
<tr>
<td>
Geslacht :</td>
<td>
<%= Request.Form["gesl"] %></td>
</tr>
<tr>
<td>
Niveau :</td>
<td>
<%= Request.Form["niv"] %></td>
</tr>
<tr>
<td>
Opmerkingen :</td>
<td>
<%= Request.Form["opm"] %></td>
</tr>
</tbody>
</table>
</body>
</html>
Zoals je merkt is de ASP.NET en de HTML-code volledig in elkaar verweven. Dit voorbeeld toont je eigenlijk hoe je het beter niet doet. Deze manier van coderen werd soms gebruikt bij het maken van pagina's in klassieke ASP. ASP.NET geeft je mogelijkheden om code beter te structureren.
Hier hebben we gebruik gemaakt van de gewone HTML formulierelementen. Je kan die zoals je ziet nog steeds gebruiken met ASP.NET, er zijn zelfs situatie waarin dit aan te raden is (bv. wanneer client-side code moet worden uitgevoerd).
Voor het server-side afhandelen van pagina's maak je in ASP.NET echter beter gebruik van Servercontrols of Web Form Controls.
| Meer tutorials: |
| leer ook: | html | | xhtml | | css | | asp | | asp.net | | c# | | ado.net | | linq | | ajax | | java | | javascript |