< Programmeren in ASP.NET

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen

Inleiding

Web-controls zijn het tweede type van server-control. Zij lijken op HTML-controls, maar zijn dikwijls ingewikkelder, en zijn niet noodzakelijk direct verbonden met een HTML-tag. Hierdoor kunnen ze meer flexibel en gemakkelijker te gebruiken zijn. Hun "objectmodel" is gewoonlijk ook complexer. Terwijl HTML-controls gewoonlijk eigenschappen hebben die hun overeenkomstige HTML-tag weerspiegelen, hebben web-controls dikwijls meer abstracte eigenschappen.

Je kan web-controls herkennen doordat de tag begint met <asp:...> en doordat ze een runat="server" attribuut hebben. Hier is een voorbeeld:

<asp:Label id="HelloWorld" runat="server"> voorbeeld </asp:Label>

Web-controls worden ook op de server verwerkt door de ASP.NET-runtime-engine wanneer een pagina waarin ze voorkomen opgevraagd wordt. Ze worden geïdentificeerd door hen een id-attribuut te geven, dat je dan kan gebruiken om naar de control te verwijzen in je code. Al deze dingen hebben ze gemeen met HTML-controls.

Als uitvoer geven ze de overeenkomstige HTML-code die dan naar de client gestuurd wordt. De uitvoer van een web-server-control is afhankelijk van het client-platform. Zo zal een web-server-control aangepaste uitvoer produceren als hij opgevraagd wordt vanaf een draagbare telefoon of een PDA.

helloworld5.aspx

<%@ Page Language="VB" %>
<script runat="server">
   Sub Page_Load(sender As Object, e As EventArgs)
	lblHelloWorld.Text = "Hello World!"
   End Sub
</script>

<html>
  <head>
    <title>ASP.NET Hello World</title>
  </head>
  <body>

    <asp:Label id="lblHelloWorld" runat="server"> </asp:Label> 

  </body>
</html>

Het enige verschil met de code in het vorige hoofdstuk is het gebruik van de control. Er staat een <asp:Label>-tag in de pagina. Deze nieuwe tag is nu het element in de code dat de tekst instelt op "Hello World!". Noteer dat de property veranderd is van InnerText naar eenvoudig Text. Dit komt doordat het objectmodel van de <asp:Label>-tag anders gedefinieerd is dan dat van de HtmlGenericControl die we eerder gebruikten.

Ter herinnering: het Page_Load-event is een event dat opgeroepen wordt wanneer een ASP.NET pagina aangevraagd wordt.

Nota: je moet de tag op één van de volgende twee manieren afsluiten:

1) met de overeenkomstige afsluit-tag:

<asp:Label id="lblHelloWorld" runat="server"> </asp:Label> 

2) met />:

<asp:Label id="lblHelloWorld" runat="server" />  

Wat is het verschil?

Het meest opvallende verschil tussen de twee is dat de tags voor web-controls er niet uitzien zoals HTML-tags. Dit komt doordat ze niet zo nauw verbonden zijn met de basis-HTML-tags zoals HTML-controls. Hoewel HTML-controls gewoonlijk hun overeenkomstige HTML-tag (met de attributen die je instelde) uitgeven, is dat meestal de enige HTML-tag die ze produceren. Web-controls kunnen meerdere HTML-tags produceren in alle mogelijke combinaties (of wat er ook maar nodig is) om hun taak te vervullen. Ze voeren functies van hoger niveau uit en ze weerspiegelen niet noodzakelijk een bepaalde HTML-tag.

Het nadeel van web-controls is dat je minder controle hebt over de geproduceerde HTML-code dan bij HTML-controls. HTML-controls zijn ook erg handig om bestaande HTML-code om te zetten naar ASP.NET, gewoon door overal runat="server" bij te zetten.

Veel vensterelementen die veel gebruikt worden in Windows zijn als web-controls nu ook op webformulieren te gebruiken, zoals een kalender, een lijst met kolommen, een lijst met aankruisvakjes, enz...

Wat is het voordeel?

Hier is een ander voorbeeld dat goed illustreert hoe krachtig sommige van deze web-controls zijn:

kalendervb.aspx

<%@ Page Language="VB" %>
<script runat="server">
    Sub Calendar1_SelectionChanged (Sender as Object, E as EventArgs)
        lblInfo.Text = "Je koos: " & Calendar1.SelectedDate
    End Sub
</script>

<html>
  <head>
    <title>ASP.NET Calendar Web-control Voorbeeld</title>
  </head>
  <body>
    <form runat="server">
      <asp:calendar id="Calendar1" runat="server" 
            onSelectionChanged="Calendar1_SelectionChanged" />
      <asp:label id="lblInfo" runat="server" />
    </form>
  </body>
</html>

Het grootste deel van de listing is redelijk simpel, maar bekijk eventjes de lijn die begint met asp:calendar. Deze lijn maakt een calendar web-control aan en gelijkt op het voorbeeld van het label hierboven.

Nogal simpel, maar kijk eens naar het resultaat in de browser:

Het is misschien niet de mooiste agenda die je kan vinden (je kan het uitzicht nog veranderen volgens je eigen smaak... dit is het uitzicht met de standaard instellingen), maar het geeft je een hoop mogelijkheden met zeer weinig code!

Dat is precies wat je met een web-control kan doen. Je krijgt een stuk functionaliteit, verpakt als een mooie control met methodes, property's, en events die ermee overeenkomen. Zo heeft de calendar-control een eigenschap SelectedDate die je in je code kan gebruiken om de gekozen datum te manipuleren. Er is ook een event SelectionChanged dat je kan gebruiken om een handeling uit te voeren telkens als de selectie verandert.

Courante web-controls

Er worden verschillende controls meegeleverd met het Microsoft .NET Framework. Sommige controls komen min of meer overeen met hun HTML-tegenpartij. Sommige controls leveren bijkomende informatie bij het terugposten naar de server, en sommige controls geven je de mogelijkheid om gegevens in tabelvorm of lijstvorm te tonen. Een aantal controls kan ook rechtstreeks gekoppeld worden aan een databank.

Er zijn talrijke web-controls die geleverd worden samen met ASP.NET: validators, een ad rotator, een repeater, alle soorten controls voor formulieren, een datagrid, een treeview control (boomstructuur), etc. Als je iets zoekt dat hier nog niet genoemd werd, kan je het waarschijnlijk downloaden van het web, of je kan het zelf schrijven!

Property's geldig voor alle controls

Alle web-controls stammen af van een gemeenschappelijke basisklasse, namelijk de System.Web.UI.Webcontrol klasse. Alle eigenschappen van deze klasse worden automatisch ook overgeërfd door elk type web-control.

De tabel hieronder geeft alle property's gemeenschappelijk voor alle web-server-controls, behalve Literal, PlaceHolder, en Xml.

Tabel: Eigenschappen van web server controls (behalve Literal, PlaceHolder en XML):

PropertyBeschrijving
AccessKeyZet de toetsenbordcombinatie waarmee je toegang krijgt tot een web-control.
AttributesGeeft de collectie attributen die werden toegepast op een web-control. Kan ook individuele attributen opvragen of wijzigen.
BackColorVerandert of geeft de achtergrondkleur van een web-control.
BorderColorVerandert of geeft de randkleur van een web-control.
BorderStyleVerandert of geeft de randstijl van een web-control.
BorderWidthVerandert of geeft de randdikte van een web-control.
CssClassVerandert of geeft de Cascading Style Sheet (CSS)-klasse die wordt toegepast op een web-control. Komt in de pagina als een "class"-attribuut.
EnabledVerandert of geeft een waarde die aangeeft of een web-control geactiveerd is.
EnableThemingIndien True, dan wordt een thema toegepast op de control . Alleen vanaf ASP.NET 2.0.
FontVerandert of geeft informatie over fontattributen van de web-server-control.
ForeColorVerandert of geeft de voorgrondkleur van de control.
HeightVerandert of geeft de hoogte van de control.
IDGeeft de naam van de control in de pagina
SkinIDVerandert of geeft de ID van de toe te passen skin . Alleen vanaf ASP.NET 2.0.
StyleVerandert of geeft de verzameling van tekstattributen die verschijnen onder de vorm van een CSS-style-attribuut binnen de tag van de control.
TabIndexVerandert of geeft de positie van de control in de tabvolgorde in het huidige document.
ToolTipVerandert of geeft de tekst die verschijnt als de gebruiker de muis boven de control laat stilstaan.
VisibleIndien False, dan wordt de control niet getoond in de pagina (onzichtbaar).
WidthVerandert of geeft de breedte van een control.

Lijst met web-controls

De tabel hieronder toont een lijst met beschikbare web-controls, en enkele van hun meestgebruikte attributen, property's en methodes. Nog meer controls kan je op het internet vinden, gratis of tegen betaling.

Tabel: Server-side controls gebruikt in ASP.NET en webformulieren:

Label
BeschrijvingToont tekst op de HTML-pagina. Komt in de pagina als een tag
AttributenText
Property'sText
Methodes
Server-Side eventsgeen
Code<asp:Label id=Label1 runat="server">Label</asp:Label>
TextBox
BeschrijvingGeeft de gebruiker een invoerzone op een HTML-formulier. Deze kan ook meerdere lijnen bevatten (TextMode=Multiline) of dienen voor de invoer van wachtwoorden (TextMode=Password)
AttributenText, Rows, Columns
Property'sText, TextMode
MethodesFocus()
Server-Side eventsTextChanged
Code<asp:TextBox id=TextBox1 runat="server"></asp:TextBox>
Button
BeschrijvingEen gewone knop gebruikt om te reageren op click events op de server. Je kan bijkomende informatie doorgeven door de CommandName en CommandArguments property's in te stellen.
AttributenText, CommandName, CommandArgument
Property'sText, CommandName, CommandArgument
Methodes
Server-Side eventsClick, Command, OnClientClick
Code<asp:Button id=Button1 runat="server" Text="Button"></asp:Button>
LinkButton
BeschrijvingZelfde functionaliteit als een Button, maar ziet eruit als een hyperlink (er is echter geen URL aan verbonden)
AttributenText, CommandName, CommandArgument
Property'sText, CommandName, CommandArgument
Methodes
Server-Side eventsClick, Command, OnClientClick
Code<asp:LinkButton id=LinkButton1 runat="server">Klik hier</asp:LinkButton>
ImageButton
BeschrijvingKnop met een afbeelding, die informatie kan doorsturen over de positie van de muis op het moment dat geklikt werd (vergelijkbaar met een image map)
AttributenImageURL, CommandName, CommandArgument
Property'sImageURL, CommandName, CommandArgument
Methodes
Server-Side eventsClick, Command, OnClientClick
Code<asp:ImageButton id=ImageButton1 ImageUrl="knop.gif" runat="server"></asp:ImageButton>
Hyperlink
BeschrijvingEen normale hyperlink-control die op klikken reageert
AttributenText, NavigateUrl, ImageURL, Target
Property'sText, NavigateUrl, ImageURL, Target
Methodes
Server-Side eventsgeen
Code<asp:HyperLink id=HyperLink1 NavigateUrl="test.aspx" runat="server">Klik hier</asp:HyperLink>
DropDownList
BeschrijvingEen normale uitklapbare lijst-control zoals de HTML-control, maar kan verbonden worden met een gegevensbron
Attributen
Property'sSelectedIndex, SelectedValue, SelectedItem, Items, DataSource, AutoPostback
MethodesItems.Add(), DataBind()
Server-Side eventsSelectedIndexChanged
Code<asp:DropDownList id=DropDownList1 runat="server"></asp:DropDownList>
ListBox
BeschrijvingEen normale lijst-control zoals de HTML-control, maar kan verbonden worden met een gegevensbron
AttributenRows, SelectionMode
Property'sSelectedIndex, SelectedValue, SelectedItem, Items, DataSource, AutoPostback
MethodesItems.Add(), DataBind()
Server-Side eventsSelectedIndexChanged
Code<asp:ListBox id=ListBox1 runat="server"></asp:ListBox>
Repeater
BeschrijvingLaat toe om een bepaald sjabloon te herhalen.
AttributenDataSource, Items
Property'sDataSource, Items
MethodesDataBind()
Server-Side eventsItemCommand, ItemCreated, ItemDataBound
Code<asp:Repeater id=Repeater1 runat="server"></asp:Repeater>
DataList
BeschrijvingLaat toe om een bepaald sjabloon te herhalen in rijvorm. Er kan ook geselecteerd en gewijzigd worden. Meerdere kolommen per pagina zijn mogelijk.
AttributenDataSource, Items
Property'sDataSource, Items
MethodesDataBind()
Server-Side eventsCancelCommand, EditCommand, DeleteCommand, ItemCommand, SelectedIndexChanged, UpdateCommand, ItemCreated, ItemDataBound
Code<asp:DataList id=DataList1 runat="server"></asp:DataList>
DataGrid
BeschrijvingLaat toe om een bepaald sjabloon te herhalen in tabelvorm.Je kan pagineren, sorteren en formatteren.
AttributenDataSource, Items
Property'sDataSource, Items
MethodesDataBind()
Server-Side eventsCancelCommand, EditCommand, DeleteCommand, ItemCommand, SelectedIndexChanged, PageIndexChanged, SortCommand, UpdateCommand, ItemCreated, ItemDataBound
Code<asp:DataGrid id=DataGrid1 runat="server"></asp:DataGrid>
GridView (2.0)
BeschrijvingDit is een verbeterde DataGrid.
AttributenDataSourceID, Rows
Property'sDataSourceID, Rows
MethodesDataBind()
Server-Side eventsCancelCommand, EditCommand, DeleteCommand, ItemCommand, SelectedIndexChanged, PageIndexChanged, UpdateCommand, ItemCreated, ItemDataBound
Code<asp:GridView id=GridView1 runat="server"></asp:GridView>
FormView (2.0)
BeschrijvingLaat toe om een enkel record te tonen uit een gegevenslijst volgens zelf te maken sjablonen. Je kan pagineren, formatteren en wijzigen.
AttributenDataSourceID
Property'sDataSourceID
MethodesDataBind()
Server-Side eventsCancelCommand, EditCommand, DeleteCommand, ItemCommand, PageIndexChanged, UpdateCommand, ItemCreated, ItemDataBound
Code<asp:Formview id=Formview11 runat="server"></asp:FormView>
DetailsView (2.0)
BeschrijvingLaat toe om een enkel record in tabelvorm te tonen uit een gegevenslijst.Je kan pagineren, formatteren en wijzigen.
AttributenDataSourceID
Property'sDataSourceID
MethodesDataBind()
Server-Side eventsCancelCommand, EditCommand, DeleteCommand, ItemCommand, PageIndexChanged, UpdateCommand, ItemCreated, ItemDataBound
Code<asp:Detailsview id=Detailsview11 runat="server"></asp:DetailsView>
CheckBox
BeschrijvingGelijkt erg op de normale HTML-checkbox-control
Attributen
Property'sChecked, Text, AutoPostback
Methodes
Server-Side eventsCheckedChanged
Code<asp:CheckBox id=CheckBox1 runat="server" />
CheckBoxList
BeschrijvingToont een groep aankruisvakjes die dynamisch aangemaakt kunnen worden.
Attributen
Property'sDataSource, Items, AutoPostback, RepeatDirection
MethodesItems.Add(), DataBind()
Server-Side eventsSelectedIndexChanged
Code<asp:CheckBoxList id=CheckBoxList1 runat="server"></asp:CheckBoxList>
RadioButton
BeschrijvingGelijkt erg op de normale HTML-radioknop die een rondje toont dat je kan aanvinken
AttributenText, Checked, Groupname
Property'sText, Checked, Groupname, AutoPostback
Methodes
Server-Side eventsCheckedChanged
Code<asp:RadioButton id=RadioButton1 runat="server" />
RadioButtonList
BeschrijvingToont een groep radioknoppen die samenwerken.
AttributenDataSource
Property'sItems, SelectedIndex, SelectedValue, SelectedItem, AutoPostback
MethodesItems.Add(), DataBind()
Server-Side eventsSelectedIndexChanged
Code<asp:RadioButtonList id=RadioButtonList1 runat="server"></asp:RadioButtonList>
BulletedList (2.0)
BeschrijvingToont een lijst met bullets.
AttributenDataSource, BulletStyle
Property'sItems
MethodesItems.Add(), DataBind()
Server-Side events
Code<asp:BulletedList id="BulletedList1" runat="server"></asp:BulletedList>
Image
BeschrijvingGelijkt erg op de gewone afbeelding in HTML
AttributenImageURL, AlternateText, ImageAlign
Property'sImageURL, AlternateText, ImageAlign
Methodes
Server-Side eventsgeen
Code<asp:Image id=Image1 runat="server"></asp:Image>
ImageMap (2.0)
BeschrijvingZoals een Image, maar met hot spots waar je kan op klikken
AttributenImageURL
Property'sImageURL, HotspotMode
Methodes
Server-Side eventsClick
Code<asp:ImageMap id=ImageMap1 runat="server" />
FileUpload
BeschrijvingGebruikt om bestanden up te loaden.
Attributen
Property'sHasFile, FileName
MethodesSaveAs(savePath)
Server-Side events
Code<asp:FileUpload id=FileUpload1 runat="server" />
Panel
BeschrijvingGebruikt om andere controls te groeperen. Komt in de pagina als als een
tag.
AttributenBackImageURL, Wrap
Property'sControls, DefaultButton, ScrollBar
MethodesControls.Add()
Server-Side eventsgeen
Code<asp:Panel id=Panel1 runat="server">Panel</asp:Panel>
PlaceHolder
BeschrijvingDient als een soort opvulsel, waar je later andere server-side controls kan toevoegen (tijdens run-time)
Attributen
Property'sControls
MethodesControls.Add()
Server-Side eventsgeen
Code<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>
MultiView (2.0)
BeschrijvingDient als container voor View-controls. Slechts één van de View-controls kan op een gegeven moment zichtbaar zijn.
Attributen
Property'sActiveViewIndex, Views
MethodesSetActiveView()
Server-Side eventsActivate, Deactivatie (op de View-controls)
Code<asp:MultiView id="MultiView1" runat="server"> </asp:MultiView>
Wizard (2.0)
BeschrijvingHiermee kan je een wizard maken, met knoppen voor "Volgende", "Vorige" en "Voltooien". Zet de verschillende stappen van de wizard in aparte WizardStep-templates.
Attributen
Property'sActiveStepIndex
Methodes
Server-Side eventsActiveStepChanged, NextButtonClick, FinishButtonClick, CancelButtonClick
Code<asp:Wizard id="Wizard1" runat="server"> </asp:Wizard>
Calendar
BeschrijvingMaakt een HTML versie van een kalender. Je kan de datum instellen of opvragen, navigeren, enz...
Attributen
Property'sSelectedDate, SelectedDates, VisibleDate
Methodes
Server-Side eventsSelectionChanged, VisibleMonthChanged, DayRender
Code<asp:Calendar id=Calendar1 runat="server"></asp:Calendar>
AdRotator
BeschrijvingHiermee kan je een lijst met advertenties (banners) opgeven. Deze lijst wordt doorlopen en elke advertentie wordt achtereenvolgens getoond. De lijst maak je in de vorm van een XML-bestand
Attributenadvertisementfile
Property's
Methodes
Server-Side eventsAdCreated
Code<asp:AdRotator id=AdRotator1 runat="server"></asp:AdRotator>
Table
BeschrijvingKomt overeen met een HTML-tabel.
AttributenZoals een HTML-tabel
Property'sRows, Row(i).Cells
MethodesRows.Add()
Server-Side eventsgeen
Code<asp:Table id=Table1 runat="server"></asp:Table>
XML
BeschrijvingGebruikt om XML-documenten weer te geven in HTML.
Attributen
Property's
Methodes
Server-Side eventsgeen
Code<asp:Xml id="Xml1" runat="server"></asp:Xml>
Literal
BeschrijvingZoals een label, maar het laat je toe letterlijk HTML-code toe te voegen. In tegenstelling tot een label wordt er geen tag gemaakt, en op een literal kan je geen styles toepassen.
AttributenText
Property'sText
Methodes
Server-Side eventsgeen
Code<asp:Literal id="Literal1" runat="server"></asp:Literal>

Al deze controls passen hun HTML-uitvoer aan aan de browser van de gebruiker. Als dit Internet Explorer is kan de control er beter uitzien dankzij DHTML-extensies. In het andere geval wordt gewone HTML 3.2 standaard-code doorgestuurd.

Oefeningen

  1. Maak een pagina met een checkbox "Gehuwd" en een invoervak "Naam echtgeno(o)t(e). Alleen als de checkbox aangekruist is, wordt het invoervak getoond.
  2. Laat de gebruiker een getal invullen. Bij het drukken van een knop toon je de vierkantswortel van dit getal.
  3. Schrijf een pagina die het gewicht m berekent van een stalen buis, als de lengte l (in m), de dikte d (in mm), en de binnendiameter b (in m) gegeven zijn. De formule is m=3,9 π l d b.
  4. Maak een pagina met een tekstvak waarin je een stuk HTML-code kan ingeven. Toon het resultaat in dezelfde pagina (bvb. met een Literal-control).
  5. Maak een pagina waarin je kan kiezen tussen Nederlands of Frans met een radioknop. Afhankelijk van de keuze toon je de (willekeurige) inhoud in de juiste taal.
  6. Doe hetzelfde, maar laat de gebruiker kiezen uit een lijst met 3 talen.
  7. Maak een pagina waar je een wachtwoord moet ingeven. Het resultaat toont of het wachtwoord juist was.
  8. Maak een formulier met een checkbox "Ik wil meer informatie". Als de gebruiker het vakje aankruist, geef je een panel met meer informatie, anders geef je een lege pagina.
  9. Maak een pagina met twee kalendercontrols. Na het kiezen van twee datums wordt in een label het aantal dagen tussen beide datums getoond.
  10. Maak een pagina met een kalendercontrol. Bij het klikken op een datum wordt getoond welke dag van de week dit is (maandag, dinsdag, enz.). Gebruik de expressie WeekDayName(WeekDay(datum),0,1) om de dag van de week van een gegeven datum te berekenen.

Werken met lijstcontrols

Omdat lijsten (keuzelijsten, radiolijsten, checkboxlijsten en bulletedlists) zo dikwijls voorkomen, en omdat ze een aantal gezamenlijke methodes hebben, bekijken we hier de mogelijkheden.

Er zijn vijf soorten lijsten:

  1. ListBox
  2. DropDownList
  3. RadioButtonList
  4. CheckBoxList
  5. BulletedList (ASP.NET 2.0)

Alle vijf zijn ze afgeleid van het type "ListControl". Het grote voordeel hiervan is dat de meeste functies gemeenschappelijk zijn.

Alle lijstcontrols (zoals trouwens ook de HTML-control HtmlSelect) hebben een eigenschap Items. Deze property is van het type "ListItemCollection", en is een verzameling ListItems. Alle wijzigingen aan deze verzameling verschijnen automatisch in de lijstcontrol zelf.

Je kan vanuit Visual Studio items toevoegen via het Properties-paneel. Je kan ook items dynamisch toevoegen, bijvoorbeeld vanuit een databank (zie paragraaf -).

Elk item heeft drie belangrijke property's: Text, Value, Selected en Enabled. Voor een ListBox en een DropDownList komt elk item in de pagina in de vorm van een <option>-tag. Een item met Text "Brussel" en Value 1 krijgt dan deze vorm:

<option value="1">Brussel</option>

Hieronder vind je een aantal veelgebruikte expressies met lijstcontrols.

Ik wil:Ik krijg het met:
het aantal itemsmijnLijst.Items.Count
de index van het geselecteerde item (begint vanaf 0)mijnLijst.SelectedIndex
weten of er iets geselecteerd isIf(mijnLijst.SelectedIndex>=0) Then
weten of het i-de item geselecteerd is (index van het eerste item=0)If(mijnLijst.Items(i).Selected) Then
de tekst van het geselecteerde itemmijnLijst.SelectedItem.Text (let op: als er niets geselecteerd is, krijg je een fout)
de value van het geselecteerde itemmijnLijst.SelectedItem.Value (let op: als er niets geselecteerd is, krijg je een fout)
of
mijnLijst.SelectedValue (werkt altijd, als er niets geselecteerd is krijg je een lege streng)
zorgen dat er niets geselecteerd ismijnLijst.SelectedIndex = -1
het item met index i selecteren (index van het eerste item=0)mijnLijst.SelectedIndex = i
of
mijnLijst.Items(i).Selected = True
(deze tweede manier werkt ook indien meerdere selecties tegelijk mogelijk zijn)
het item met tekst "x" selecteren
mijnLijst.SelectedIndex=-1
Dim li = mijnLijst.Items.FindByText("x")
If(Not li Is Nothing) Then 
li.Selected = True
het item met value "x" selecteren
mijnLijst.SelectedIndex=-1
Dim li = mijnLijst.Items.FindByValue("x")
If(Not li Is Nothing) Then 
li.Selected = True
een item toevoegen vanuit code (onderaan de lijst)
Dim li As New ListItem("de tekst","de waarde")
mijnLijst.Items.Add(li)
een item toevoegen vanuit code (bovenaan de lijst)
Dim li As New ListItem("de tekst","de waarde")
mijnLijst.Items.Insert(0,li)
het item met index i verwijderenmijnLijst.Items.RemoveAt(i)
de lijst leegmakenmijnLijst.Items.Clear()

Let op: een CheckBoxList kan meerdere geselecteerde items hebben. In een ListBox kan dat ook als de property SelectionMode ingesteld staat op Multiple. In dat geval geeft SelectedIndex alleen het eerste geselecteerde item aan, en dus moet je de lijst één voor één doorlopen om te kijken welke items er nog geselecteerd zijn. Dat kan met een gewone For-lus:

Dim aantalGeselecteerd As Integer = 0
Dim i As Integer
For i=0 To mijnLijst.Items.Count-1
	If(mijnLijst.Items(i).Selected) Then
		aantalGeselecteerd+=1
             ' doe eventueel iets met dit item
	End If
Next i

of met een For-Each-lus:

Dim aantalGeselecteerd As Integer = 0
Dim li As ListItem
For Each li In mijnLijst.Items
	If(li.Selected) Then
		aantalGeselecteerd+=1
             ' doe eventueel iets met dit item
	End If
Next li

Nog meer voorbeelden vind je op http://www.dnzone.com/ShowDetail.asp?NewsId=671.

Let op:
Zorg er goed voor dat je nooit een oneindige lus maakt in ASP.NET! De lus wordt immers op de server uitgevoerd, en je krijgt dan na enige tijd een Server Error, maar wat erger is: je vertraagt de server voor alle gebruikers.

Opmerking:
Je kan ervoor zorgen dat de pagina reageert zodra de gebruiker een selectie maakt in een lijstcontrol. Dit doe je door de property AutoPostBack van de lijstcontrol op True in te stellen.

Oefeningen

  1. Maak een dropdownlijst gevuld met alle getallen van 1 tot 100.
  2. Maak een pagina met een CheckBoxList met 5 soorten fruit. Als de gebruiker zijn/haar keuze gemaakt heeft toon je het aantal geselecteerde items.
  3. Maak een pagina met een RadioButtonList met 2 keuzes: "fruit" en "groenten". Zet ook een Listbox op de pagina, met 3 voorbeelden van wat geselecteerd is in de RadioButtonList.
  4. Zelfde oefening, maar vervang de RadioButtonList door een CheckBoxList.
  5. Maak een pagina met 5 aankruisvakjes: Tafel, Stoel, Bed, Kast, en Alles. Als je op "Alles" klikt, moeten de 4 andere vakjes automatisch aangekruist worden. Tip: gebruik "AutoPostback".
  6. Maak een pagina met een keuzelijst, een invoervak, en een knop. Als de gebruiker iets invult in het vak en op de knop drukt, dan wordt dit toegevoegd aan de lijst.
  7. Zelfde oefening, maar nu ook met een knop "verwijderen", waarmee het geselecteerde item verwijderd wordt.
  8. Zelfde oefening, maar nu ook met een knop "omhoog" en een knop "omlaag". Het geselecteerde item wordt verplaatst in de lijst.
  9. Maak een pagina met twee lijsten en twee knoppen. Met de eerste knop breng je een item over van lijst1 naar lijst2, en met de tweede omgekeerd.

Client-side-gebeurtenissen verwerken

In tegenstelling tot HTML-controls kan je niet zomaar JavaScript toevoegen aan web-controls om gebeurtenissen zoals bijvoorbeeld OnClick te verwerken. De reden hiervoor is dat sommige web-controls al JavaScript gebruiken om automatische postback te verkrijgen, waardoor OnClick misschien al voor iets anders gebruikt wordt.

Daarom moet je een andere manier gebruiken via de eigenschap "Attributes" van de web-control.

Voorbeeld:

btnSubmit.Attributes.Add("onMouseOver", "bepaaldeClientCode();")

waarin bepaaldeClientCode() een functie uit een client-side JavaScript blok is.

Een veelgebruikt voorbeeld hiervan is een "verwijder"-knop. Meestal wil je dan een waarschuwing tonen, zodat de gebruiker niet per ongeluk op de knop kan klikken. Dit kan je doen met de volgende code:

btnVerwijder.Attributes.Add("onClick", "return confirm('Ben je wel zeker?');")

Bij knoppen in ASP.NET 2.0 kan het nog eenvoudiger, die hebben een OnClientClick-event, dat je kan instellen. De code hierboven wordt dan:

btnVerwijder.OnClientClick="return confirm('Ben je wel zeker?');"

Commentaar tussen web-controls

Je zou kunnen denken dat je de gewone commentaarcodes (<!-- -->) voor HTML kan gebruiken tussen de web-control-tags. Dit werkt echter niet.

Voor web-controls gebruik je deze commentaartekens:

<%--    --%>

Bijvoorbeeld:

<%--     <asp:Label runat="server">Niet getoond</asp:Label>      --%>

Binnen de <script>-tags gebruik je natuurlijk het commentaarteken voor VB (de apostrof).


This article is issued from Wikibooks. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.