Lektion 2, Grundläggande funktioner i ASP.NET Lektionen behandlar kapitlen 3 och 4 i kursboken. Application och Page Framework Med Visual Studio 2005 levereras ett antal inbyggda verktyg bland annat SQL Sever Express och en enklare webbserver. Vi kommer att användas oss av den inbyggda webbservern i våra inlämningsuppgifter. Den inbyggda webbservern är även default server när du utvecklar i Visual Studio 2005. Detta har den fördelen att vi slipper bekymra oss om att etablera kontakt med en extern webbserver. Den inbyggda webbservern Den inbyggda webbservern är default i Visual Studio 2005. Default placering av webbprojekt är C:\Documet and Settngs\(användare)\Mina Dokument\Visual Studio 2005\Web Sites\. Detta innebär att projektet placeras i profilen och om projekten blir stora så kommer det i sin tur att innebära att inloggning på datorn kommer att gå långsammare. Placering av projekten kan ändras genom att klicka på Browse knappen i Choose Location dialogen när du skapar en ny website. I Choose Location kan du även välja viken webbserver projektet skall sparas för. Det är alltså här du kan välja en annan webbserver än den inbyggda. Ute till höger finns fyra knappar för att välja antingen den inbyggda webbservern, Lokal IIS server, FTP site eller Remote Site. Lokal IIS är den webbserver som följer med Windows 2000 pro, XP pro och Windows 2003 server (samt vissa versioner av Vista). Med knappen FTP Site väljer du en webbserver annan än din lokala maskin som har stöd för FTP. Personligen föredrar jag att utveckla på lokal maskin och FTP a upp den färdiga applikationen i efterhand. Den fjärde knappen, Remote Site använder Frontpage Server Extentions för att kommunicera med en extern webbserver. Detta förutsätter att fjärrservern har detta installerat. Min personliga erfarenhet är att det ofta innebär mer problem än det löser att göra på detta sätt. 1
Partial classes Asp.net 2.0 är byggt på.net framework 2.0 och kan därför dra nytta av dess egenskaper. En av dessa egenskaper är möjligheten att använda partial classes. Detta delar upp koden i flera filer som sedan sammanställs vid kompilering. inline coding I tidigare versioner av Visual Studio.NET förutsattes att all kod skulle placeras i code behind filer. Detta har nu Microsoft, efter påpekanden från utvecklare, ändrat på. I version 2005 är detta faktiskt väldigt enkelt. Man ser helt enkelt till att rutan Place code in Separate File inte är ikryssad när man skapar projektet. De flesta typer av ASP.NET filer kan kodas inline men inte alla. Code Behind Version 2.0 jobbar på ett annat sätt med code behind. Hela iden med code behind är att skilja presentation från logik (kod). Detta gör det enklare att jobba med filerna var för sig och om man jobbar i team där olika personer arbetar med presentation och logik, detta underlättar mycket. Code behind filen får automatiskt samma namn som den aspx fil som den tillhör ex. Default. Aspx får en code behind med namnet Default.aspx.cs. Visual Studio lägger bara till filändelsen för aktuellt språk efter.aspx, i vårt fall.cs för C#. När man använder code behind skapas ett antal attribut till ett direktiv i ASP filen. Raden brukar se ut ungefär så här <% # @Page Language= C# CodeFile= Default.aspx.cs Inherits= Default_aspx %> Det första attributet, Language anger att vi använder oss av C# som språk. Andra attributet CodeFile talar om vad vår kodfil heter. Det tredje attributet anger vilken klass koden skall bindas till vid kompilering. ASP.NET Page Directives Vi såg nyss exempel på ett page directiv. Vi skall nu titta närmare på vad det är. Med Page Directives styr vi funktionen hos en ASP sida. Det finns totalt 11 st Page directiv där @Page är ett av dem. Varje directiv har ett antal möjliga attribut. @Page har t.ex. 37 olika attribut. På sidorna 56 57 (68 78) i boken finns alla direktiv och dess attribut listade. De vanligaste direktiven är @Page, @Master, @Control och @Import. ASP.NET Page Events Event är något som man hela tiden använder sig av som ASP.NET utvecklare. Varje händelse triggar ett event. Om du tex klickar på en knapp på en ASP.NET sida så triggas eventet button_click. Page Event är event som triggas av att en sida laddas eller förstörs. Vanligast är att man vill använda sig av page_lood eventet för att utföra något när sidan laddat färdigt men det förekommer även att man använder andra page event. De page event som finns presenteras på sidorna 66 67 ( 78 79) i boken. Page eventen för huvudsidan inträffar i följande ordning: 1. PreInit 2. Init 3. InitComplete 4. PreLoad 5. Load //nu är sidan laddad 6. LoadComplete 7. PreRender 2
8. PreRenderCompete 9. UnLoad //sidan förstörd Post Back När man skapar interaktiva ASP.Net sidor jobbar man normalt med post back. Dvs. data från sidan skickas tillbak till samma sida där den behandlas. Man vill därför oftast hålla reda på om ett anrop till en sida är det första eller om det är en post back. Detta kan kontrolleras genom att undersöka egenskapen IsPostBack. ex. if(page.ispostback == True) { //Processa kod } Detta är bara ett exempel på användning men det finns fler. Cross Page Posting Något som många utvecklare som jobbat i klassisk ASP har saknat i version 1.0 och 1.1 av ASP.NET är möjligheten att posta till en annan sida, till skillnad från Post Back. I version 2.0 har man återinfört denna möjlighet. Detta är enkelt och man använder sig av egenkapen PostBackUrl. Se litning 3 9 och 3 10 i boken. Titta då på egenskaperna (attributet) till Button2. I detta exempel har man skapat en sida med två knappar, en textbox och en kalender. Button1 gör en vanlig Post Back medan Button2 postar till page2.aspx. Nästa steg är att hämta upp det data som postats till page2. Detta kan göras på minst ett par olika sätt. I listing 10 använder man PreviusPage.FindControl. Detta är nödvändigt då kontrollen är privat. Ett annat sätt är att göra kontrollen på page1 publik som i listing 3 11, 3 12 raderna public Textbox... och public Calendar Kontrollerna kan då ses direkt av page2. Observera att vi då måste typa page1 för att det skall fungera, <% @ PreviusPageType VirtualPath= Page1.aspx %>. Även vid Cross Page Posting är vi intresserade av att veta om sidan har accessats direkt eller via Cross Page. På motsvarande sätt som för Post Back men för egenskapen IsCrossPagePostBack. Subfoldrar (mappar) i ditt ASP.NBET projekt Antalet foldrar och filer i ett asp.net projekt är obegränsat. Några subfoldrar i ditt asp projekt är dock reserverade för speciella filer. För att skapa foldrarna, högerklicka i Sulution Explorer, välj Add New Folder folder tex App_Code Foldrar: \App_Code Här spara du dina klassfiler. Filerna blir automatiskt tillgängliga för hela applikationen. Allt som sparas här detekteras automatiskt av Visual Studio 2005 och kompileras om det är en klass (.cs). \App_Data En platts att centralt spara dina datafiler. ex. SQL Express (.mdf), Access (.mdb) eller XML (.xml). Användarkontot (ASP.NET kontot)för din applikation har läs och skriv rättigheter här. \App_Thems Här sparar du dina teman med tillhörande filer (.skin,.css ) och bilder. 3
\App_GlobalResourses Globala resurser (ex. lista för multilanguage). \App_LokalResourses Som ovan men för en viss aspx fil \App_WebReferences Referenser till remote webservices Kompileringsprocessen När en ASP.NET sida för första gången efterfrågas vidarebefordras den till ASP.NET parsern som skapar klasser i valt språk som sedan kompileras till en DLL som sparas på webbserverns disk. DLL en körs och det skapas ett svar (responce) skapas som skickas tillbaka till den webb klient som efterfrågat resursen. Detta tar en del tid och gör att applikationen kan upplevas som långsam. Vid andra förfrågan efter samma resurs är gången dock en annan förutsatt att inga förändringar gjorts i applikationen. I stället för att gå igenom hela processen anropas i stället den färdiga DLL en som körs. I ASP.NET 2.0 har det även införts möjligheter att köra pre compile på en hel site direkt vid deployment av siten. Då behöver aldrig besökaren uppleva den fördröjning som kommer av kompileringen. 4
ASP.NET Serverkontroller Vad är en server kontroll? Serverkontroller är komponenter som innehåller viss funktionalitet som du önskar implementera på sidan. Med en server kontroll bestämmer vi funktionaliteten utan att behöva tänka på vilken webbläsare klienten har, detta tar serverkontrollen hand om åt oss och anpassar den genererade koden efter detta. Två huvudgrupper av kontroller Det finns två huvudgrupper av kontroller, HTML Server kontroller och Web Server kotroller. HTML serverkontroller mappar direkt mot HTML element medan Web server kontroller beror av sammanhanget de placerats i. Ex: en htmltable mappar mot HTML s table medan en web asp:panel kan använda en <table> eller en <iframe> beroende på vad som passar den anropande webbläsaren bäst. Använd: HTML kontroller när du konverterar klassisk ASP kod du efterstävar en mer HTML lik lösning. du vill vara helt säker på vilken kod som levereras till webbläsaren. Web server kontroller du riktar dig till olika browsers du vill ha mer funktionalitet Koda serverkontroller Tidigare har vi sett hur vi kan dra och släppa kontroller i design vyn. Detta är även möjligt i source vyn. Dra en kontroll från verktygsfältet och släpp den på rätt ställe in koden. Om du markerar en kontroll i design vyn och sedan byter till source vyn så är den även markerad där. Att jobba med event ASP.NET är ett händelsestyrt system, en händelse triggar en särskild funktionalitet hos applikationen. Vi har redan sett att man kan komma till direkt koden för en händelsehanterare genom att dubbelklicka på en konroll. Ett skal för eventet skapas där vi kan placera vår kod. Det finns en mängd andra event än de som visas by default. Längst upp i source vyn finns två dropp down lister. Den första väljer kontroll och den andra väljer event. Här kan du se en del av de event som finns. Ett annat sätt att lägga till ett event för en kontroll är att göra det från Propertis fönstret. Markera den serverkontroll du jobbar med 5
i design vyn och klicka på event knappen (blixt symbolen) i Properties fönstret och du får en lista över tillgängliga events. Att styra kontrollernas utseende Ett sätt att styra hur serverkontroller ser ut på den färdiga sidan är att ändra useende genom att ändra egenskaper i Properties fönstret. Det mesta går att ändra vad gäller utseende men personligen använder jag hellre CSS style sheets. Visual Studio 2005 har ett verktyg för att skapa Stle Sheets, Style Builder. För att aktivera Style Builder, högerklicka på det objekt du vill ange style för och klicka på Style i menyn. Externa Styles När du skall skapa ett externt style sheet högerklickar du på rotkatalogen för din webbsite, väljer New item i meny. I den följande menyn väljer du Style Sheet. Nu skapas en kodfil för CSS med intelisense. För att koppla CSS filen till aspx filen kan du antingen välja egenskapen för DOCUMENT och där välja sökvägen till din CSS. Ändå enklare är att helt enkelt dra Style Sheetet från sulotion explorer och släppa den i dokumentet. Exempel på ett externt style sheet ses i listing 4 4. HTML serverkontroller HTML serverkontroller mappar direkt mot html element. När du drar en html serverkontroll tillsidan så blir den inte automatiskt en server kontroll. För att göra den till en serverkontroll kan du antingen högerklicka på objektet och välja Run as server Control en liten grön triangel dyker upp på komponenten i design vyn för att visa att det är en serverkontroll. 6
I source vyn kan du helt enkelt lägga till argumentet runat= server. Alla Html kontroller ärver från klassen HhtmlControl och ärver därmed även egenskaperna från denna klass. För den som är mer intreserad finns information i SDK. HtmlContainerControl används för element som saknar sluttagg, ex <img>, <input> och <linc>. Två viktiga element i htmlcontainercontrol är inerhtml och inertext. Alla HTML kontroller finns listade i boken sid 111 112 (129 130). htmlgenericcontrolclass ger tillgång till element som man normalt inte når programatiskt, tex <meta>, <p> och <span> 7