Ajax: Ajax.Net

  1. Inleiding
  2. Ajax.Net
  3. Starten met Ajax.Net
  4. Gekoppelde DropDownLists - database
  5. Meer info

Opmerking vooraf

De technologie uit dit hoofdstuk werkt nog steeds, maar is ondertussen voorbijgestreefd door andere nieuwe ontwikkelingen.
Om nostalgische redenen, en voor de volledigheid van het cursusmateriaal kan dit hoofdstuk nog geraadpleegd worden.

Inleiding

Ajax is gebaseerd op open technologieën zoals HTML, XML en Javascript. Het kwam al een aantal keer ter sprake dat we voor een efficiënt gebruik van Ajax, deze technologie best combineren met een server-side technnologie zoals ASP, PHP, JSP of ASP.NET.

Door gebruik te maken van een server-side techniek kan je de response laten variëren naargelang de gestelde actie door de gebruiker.

Wij focussen ons op het gebruik van Ajax binnen het .Net gebeuren en bekijken hoe we deze krachtige techniek kunnen toepassen in ASP.Net pagina's.

Reeds vanaf .Net 1.1 was het mogelijk om asynchrone gegevenstransfer te combineren met .Net. Je kan hieromtrent veel opzoekingswerk verrichten en proberen om alles handmatig te programmeren. Anderen hebben je dit echter voorgedaan en boekten reeds fantastische resultaten.

Sinds .Net 2.0 heeft Microsoft zelf mogelijkheden toegevoegd om met asynchroon dataverkeer te werken via de zogenaamde Client Callback functionality en het Atlas-project: de Microsoft benaming voor een extra Framework binnen .Net 2.0 met mogelijkheden voor asynchrone datatransfer.

Het gebruik van Ajax binnen het .Net Framework zal ik voortaan Ajax.Net noemen.

Een voorbeeld om Ajax binnen .Net zonder extra hulpklassen uit te voeren vind je bij Codeproject.

Ajax.Net

Het gebruiken van Ajax.Net werd reeds grondig bestudeerd, zodat her en der op het internet klassenbibliotheken beschikbaar werden. Een veelgebruikte en door Microsoft zelf bewierookte bibliotheek komt van Michael Schwarz. We zullen deze bibliotheek dan ook leren gebruiken in onze eigen toepassingen.

Starten met Ajax.Net

Een eerste Ajax-enabled project aanmaken

  1. Download de klassenbibliotheek voor Ajax.net.
  2. Pak deze klassenbibliotheek uit in een map naar keuze vb. AjaxNet
  3. Open Visual Studio.Net 2005 en maak een nieuwe Website: ajaxnettoep
  4. Leg een referentie naar AjaxPro.2.dll in de map AjaxNet
  5. Voeg volgende informatie toe aan Web.config (laat eventueel eerst het project starten om automatisch een Web.config-file te maken):
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
        </httpHandlers>
    
      [...]
    
      </system.web>
    </configuration>
    
  6. Voeg een nieuwe Web Form toe: Bericht.aspx
  7. Stel deze pagina in als startpagina
  8. Registreer de klasse Bericht voor Ajax-gebruik:
  9. protected void Page_Load(object sender, EventArgs e)
    {
        AjaxPro.Utility.RegisterTypeForAjax(typeof(Bericht));
    }
    
  10. Maak in de klasse Bericht een methode aan voor Ajax-gebruik:
  11. [AjaxPro.AjaxMethod]
    public string ToonBericht()
    {
        return "Bericht van de server";
    }
    
  12. Voeg een HTML-button toe aan de pagina:
  13. <body>
        <form id="form1" runat="server">
        <div>
        <input id="Button1" type="button" value="button" onclick="toonServerBericht()"/>
        </div>
        </form>
    </body>
    
  14. Voorzie een script-blok op de pagina:
  15. <script type="text/javascript">
    function toonServerBericht()
    {
        Bericht.ToonBericht(maakAlert);
    }
    
    function maakAlert(bericht){
        alert(bericht.value);
    }
    </script>
    
  16. Voer het project uit en klik op de knop!

Het eerste project uitgelegd

Gekoppelde DropDownLists

Intro

De volgende toepassing is een stuk geavanceerder, maar geeft je een idee hoe Ajax in echte projecten kan worden gebruikt. De echte kracht en efficiëntie van Ajax zal nu pas ten tonele komen.

Voor deze toepassing maken we gebruik van de spionshop-database

We zullen twee DropDownLists op het scherm brengen. De eerst DropDownList bevat de namen van de categorieën uit de tabel categorie van de database.
Maak je een keuze in deze DropDownList, dan verschijnen de artikels uit deze categorie in de tweede lijst. Deze lijst wordt asynchroon gevuld: de items worden opgevraagd uit de database op het ogenblik dat de gebruiker een keuze maakt.

We zullen zorgen voor een gescheiden presentatielaag (Presentation Layer) en datalaag (Data Access Layer).

De Website aanmaken - database installeren - Ajax

Web.config

De Stored Procedures

Voorzie volgende Stored Procedures in de database.
CREATE PROCEDURE Categorieen
AS
SELECT cat_id, categorie
FROM categorie
ORDER BY categorie

GO
CREATE PROCEDURE ArtikelUitCategorie @CatID smallint
AS
SELECT artikel_id, artikel, omschrijving, verkoopprijs
FROM artikel
WHERE cat_id = @CatID
ORDER BY artikel

DAL: De Data Access Layer

De pagina DropDownLists.aspx

Het bestand shopartikels.js

EventValidation

ViewState

Wanneer je een artikel kiest, dan zal je merken dat de categoriekeuze bewaard blijft na een PostBack, maar niet de artikelkeuze.

Dit fenomeen heeft natuurlijk zijn oorzaak in het feit dat de artikellijst client-side wordt gevuld, de inhoud is niet bewaard in de ViewState.

Wil je na een PostBack de artikelinfo terugvinden in de lijst, en het juist artikel geslecteerd zien, dan zal je daar wat extra code moeten voor schrijven:

if (!Page.IsPostBack)
{
    DDLcat.DataSource = DAL.GetCategorie();
    DDLcat.DataTextField = "categorie";
    DDLcat.DataValueField = "cat_Id";
    DDLcat.DataBind();
    DDLcat.Items.Insert(0, new ListItem("Maak uw keuze...", "0"));
}

else //er is een PostBack
{
	//Daar DDLart client-side werd aangemaakt, beschikken we server side enkel over de
	//meegestuurde Form-info van het geslecteerde artikel, niet meer over de volledige
	//lijst van artikels
	//Het artikel_id van het geselecteerde artikel kunnen we uit de Form-info halen
    string artid = Request.Form[DDLart.UniqueID];
	
	//We halen de geslecteerde categorie op en zoeken de artikels op uit de DB
    DDLart.DataSource = DAL.GetArtikel((Convert.ToInt32(DDLcat.SelectedValue)));
    DDLart.DataTextField = "Artikel";
    DDLart.DataValueField = "Artikel_id";
    DDLart.DataBind();
	
	//we zoeken het artikel met het artikel_id zoals door de gerbuiker geselecteerd
    DDLart.SelectedIndex =
        DDLart.Items.IndexOf(DDLart.Items.FindByValue(artid));
}

Meer info

Site Beschrijving
Ajax.Net Home van Ajax.Net, het Framewerk van Michael Schwarz
Code-magazine Uitgebreid artikel, waarin stap voor stap een 3-tier toepassing gebouwd wordt
Codersource.net Artikel bij codersource.net: basis, dataset, custom object
MSDN MSDN artikel over Ajax.Net, gebruikt hier en daar achterhaalde technieken
Developerfusion Artikel basisgebruik bij developerfusion

Meer tutorials:
leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
Valid HTML 4.01! Valid CSS! © - Cursusweb