ASP.net : Formulieren

  1. Inleiding
  2. Het http protocol
  3. Html formulieren

Inleiding

Een van de taken die je als webontwikkelaar heel vaak zal uitvoeren is het opvragen en verwerken van informatie die de gebruiker je geeft.Welke informatie je ook wenst op te vragen, deze kan niet verwerkt worden met enkel HTML-code op de browser. Informatie die je wenst te gebruiken moet naar de webserver gestuurd worden voor verwerking.

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.

Het http protocol

Het Internet is een netwerk tot ontwikkeld is om informatie van de ene plaats naar de andere te brengen. Wanneer een browser een pagina wenst op te halen stuurt die een bericht naar de server. Dit bericht wordt verstuurd met het HTTP Protocol (Hypertext Transfer Protocol). Het bericht dat de browser stuurt naar de server is de HTTP Request. Wanneer de server dit bericht ontvangt, wordt het resultaat verstuurd naar de browser via de HTTP Response.

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 formulieren

Formulieren zijn in HTML een manier voor de gebruiker om informatie terug te sturen naar de server. Formulieren zijn in HTML omgeven door de <form> en </form> tags. Twee attributen zorgen voor het correct versturen naar de server:

De methode GET

<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>
Wanneer je dit bestand opent in een browser kan je een naam invullen in het tekstvak.

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>
Wanneer je deze pagina opslaat als volgende.aspx in dezelfde map als formget.html kan je het formulier wel aan het werk zien:

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.

De methode POST

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>
Het enige verschil in de code is de opdracht Request.Form i.p.v. Request.Querystring.
Wanneer je de resultaatpagina in de browser ziet merk je dat de informatie deze keer niet in de adresbalk te zien is. De informatie werd nu verstuurd in de body van de HTTP requestinformatie, deze informatie is dus ook bereikbaar voor ASP.NET.

Get of POST

Het gebruik van de methode GET of POST hangt af van de situatie. Bij GET wordt de informatie in de querystring als deel van de URL opgegeven. Daardoor is het mogelijk de pagina met argumenten te bookmarken, wat bij POST niet mogelijk is. Vandaar dat veel zoekmotoren de methode GET gebruiken. Het is echter aan te raden bij formulieren waar paswoorden of andere gevoelige informatie wordt gevraagd de methode POST te gebruiken.

HTML formulierelementen

HTML kent natuurlijk een ganse reeks formulierelementen, deze heb je leren kennen in de cursus HTML4.

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).

Uitgebreid voorbeeld

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>
In je browser levert deze code :

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
Valid HTML 4.01! Valid CSS! © - Cursusweb