Ik woon in de buurt van Amsterdam en dat betekent wel haast automatisch dat Ajax mijn club is. Helaas heb ik de laatste jaren weinig reden om daar trots op te zijn. Toch ben ik een echte AJAX supporter, hoewel ik eerlijk moet zijn dat ik het dan niet meer over voetbal heb, maar over Asynchronous JavaScript And XML.
Als je als ASP.NET ontwikkelaar nog niet naar AJAX hebt gekeken, dan wordt het hoog tijd dat je dat gaat doen. AJAX maakt de gebruikerservaring rijker en maakt het programmeren (vaak) makkelijker. Vooral als je gebruik maakt van alles wat er al op het web te vinden is om met AJAX te werken en dan met name van de ASP.NET AJAX Control Toolkit, waarvan in mei versie 3 uitgekomen is. De Control Toolkit is een open source project dat vanuit Microsoft gestuurd wordt, maar waar in principe iedereen aan kan bijdragen of zelf aanpassingen kan doen. Je kunt de Control Toolkit in actie zien op http://www.asp.net/ajax/AjaxControlToolkit/Samples/ en daar kun je ook downloads, tutorials en video's vinden. Omdat de Control Toolkit open source is, kun je inspiratie opdoen voor je eigen controls en zien hoe je volgens best practices AJAX kunt gebruiken. En die best practices zijn nodig, want je kunt AJAX op allerlei manieren misbruiken.
Hoe het niet moet…
ASP.NET AJAX bestaat eigenlijk uit een aantal onderdelen. Het belangrijkste onderdeel is een JavaScript bibliotheek die het veel eenvoudiger maakt om bepaalde functionaliteit te verzorgen in de browser en waarmee je web services kunt aanroepen op de server. Daarnaast is er een server deel voor het aanbieden van web services als onderdeel van een pagina en de UpdatePanel control. Die laatste lijkt heel handig. Je kunt namelijk op een pagina regionen aanmaken die zich los van de rest van de pagina kunnen verversen. Voor eenvoudige scenario's waarbij bandbreedte en responstijd allemaal niet zo belangrijk zijn, is dit nog best handig, want je kunt er snel resultaat mee bereiken. Ook is het erg handig voor prototypes en demo's, want man, wat loopt dat lekker op een lokale machine! De koude douche komt als je complexe pagina's met de UpdatePanel control hebt gemaakt en deze "in het wild" gaat gebruiken. Dan blijkt het toch allemaal niet zo lekker te lopen, want de UpdatePanel control is eigenlijk een heel dom ding. Wanneer een UpdatePanel ververst moet worden, wordt een volledige PostBack gedaan. Op de server wordt dan ook de volledige pagina uitgevoerd alsof er sprake is van een PostBack. Daarna kijkt ASP.NET AJAX welke stukken van de pagina daadwerkelijk veranderd zijn en stuurt dat terug naar de browser, die daar de UpdatePanel control(s) bijwerkt. Heel vernuftig, maar een totaal verkeerde benadering, want dit betekent enorm veel overhead in het netwerkverkeer en onnodige belasting van de server.
Hoe het wel moet
Het grote voordeel van AJAX is dat je web services aan kunt roepen die op de server draaien en dat je het resultaat daarvan in de browser kunt verwerken. Wil je bijvoorbeeld een DropDownList vullen met gegevens aan de hand van de keuze uit een andere DropDownList, dan kun je de betreffende gegevens ophalen met een webservice en dan met wat JavaScript de DropDownList vullen. Dit werkt sneller en efficiënter dan een UpdatePanel waarin je de DropDownList zet die je wilt aanpassen. Ten eerste doe je geen volledige postback, maar gaan alleen die gegevens over de lijn die daadwerkelijk nodig zijn. Ten tweede is de code om de DropDownList te vullen waarschijnlijk efficiënter. En ten derde kun je voor de verwerking van de data gebruik maken van de kracht van de client computer. Het is natuurlijk wel wat meer werk om het zelf te doen, maar de voordelen maken het de moeite waard. Overigens hoef je voor dit voorbeeld niets zelf te doen, want de CascadingDropDown uit de Control Toolkit is specifiek gemaakt voor dit scenario.
AJAX zelf implementeren kost iets meer werk, maar de voordelen maken het de moeite waar
Quick wins
Zonder dat je al erg diep in de technologie hoeft te duiken biedt de Control Toolkit een aantal controls die je heel snel kunt gebruiken en die al enorme voordelen bieden. De eerder genoemde CascadingDropDown is daar een voorbeeld van, maar nog makkelijker en sneller zijn de verschillende "control extenders" waarmee je bestaande controls uit kunt breiden om bepaalde dingen te doen. Met de PasswordStrength control extender bijvoorbeeld kun je een TextBox uitbreiden om de sterkte van een wachtwoord te controleren. Dit kan visueel op verschillende manieren. De FilteredTextBox en MaskedEdit kun je aan een TextBox koppelen zodat gebruikers alleen bepaalde karakters of een bepaald patroon (bijvoorbeeld een telefoonnummer) in kunnen voeren. In tegenstelling tot de ASP.NET validator controls, gaat dit proactief aangezien de gebruiker geen ongeldige invoer kan geven. Met een validator control kan dat wel, maar blokkeert de validator de PostBack. Vanaf versie 3.0 bevat de Control Toolkit ook een HTMLEditor control die je zou kunnen gebruiken als standaard in plaats van een van de commerciële controls die hiervoor beschikbaar zijn in de markt. Kortom, je doet er goed aan om snel eens te kijken naar de Control Toolkit en er je voordeel mee te doen. Op naar snellere en intuïtieve webinterfaces!