{"id":484,"date":"2011-11-09T08:15:43","date_gmt":"2011-11-09T06:15:43","guid":{"rendered":"http:\/\/www.kristiansborg.dk\/bibliotek\/?page_id=484"},"modified":"2011-11-09T08:32:50","modified_gmt":"2011-11-09T06:32:50","slug":"kapitel-3-programmering-med-asp","status":"publish","type":"page","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/","title":{"rendered":"Kapitel 3 Programmering med ASP"},"content":{"rendered":"<p>I dette kapitel vil der blive beskrevet nogle grundl\u00e6ggende programmeringsteknikker som brug af variable og metoder. Derefter vil der blive taget fat p\u00e5 ASP-programmeringen, hvor det vil blive gennemg\u00e5et, hvordan man laver en HTML-side fra ASP, hvordan man overf\u00f8rer data fra en formular til en ASP-side, og hvordan man bruger nogle af de avancerede komponenter, der er en del af ASP.<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<p><b>Du l\u00e6ser en gammel bog<\/b><\/p>\n<p>Den bog, du l\u00e6ser her, er fra 1999, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om den aktuelle version af ASP.NET, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0735643385)\" onclick=\"javascript:pageTracker._trackPageview('\/outbound\/article\/http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0735643385)');\"  target=\"_blank\">Programming ASP.NET 4.0<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n<h1>Den dynamiske web-side<\/h1>\n<p>Den dynamiske web-side best\u00e5r ud over statisk HTML-kode ogs\u00e5 af ASP-kode. Det betyder, at der skal findes en m\u00e5de at skelne mellem HTML-kode og ASP-kode. Her har man valgt at bruge &lt;% til at angive, at det efterf\u00f8lgende er ASP-kode, mens %&gt; bruges til at angive, at ASP-koden slutter her. Den del af ASP-siden, der st\u00e5r uden for &lt;%\u2026%&gt;, opfattes som HTML. For at web-serveren kan finde ud af, at en fil er en ASP-side og ikke en vanlig HTML-side, er det vigtigt at give ASP-filer filtypen ASP.<\/p>\n<p>Som det blev n\u00e6vnt tidligere, kan man bruge flere forskellige programmeringssprog sammen med ASP. Selv om ASP-teknologien er den samme, uanset hvilket programmeringssprog man anvender, er web-serveren n\u00f8dt til at vide, hvilket sprog ASP-siden skal fortolkes som.\u00a0 Derfor er det n\u00f8dvendigt med en metode til at angive, hvilket sprog man bruger. Til det bruger man en global indstilling. Globale indstillinger g\u00e6lder for hele den ASP-side, de er en del af. Globale indstillinger bliver beskrevet n\u00e6rmere senere. Den indstilling, der angiver programmeringssproget, hedder \u2013 logisk nok \u2013 language. Da man altid s\u00e6tter et @ foran globale variable, skal man skrive f\u00f8lgende for at s\u00e6tte sproget til JavaScript:<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%@Language=JavaScript %&gt;<\/p>\n<h2>Variable<\/h2>\n<p>Som n\u00e6vnt i kapitel 1 under afsnittet om JavaScript er JavaScript et sprog uden typer. Det betyder, at det som regel ikke er n\u00f8dvendigt at erkl\u00e6re variable. Der er dog enkelte undtagelser. Det g\u00e6lder is\u00e6r arrays. Et array er en samling af data \u2013 for eksempel en r\u00e6kke tal. Hvis man eksempelvis vil have tallene fra 0 til 9 i et array, kan man definere det s\u00e5ledes:<\/p>\n<p>&nbsp;<\/p>\n<p>tal = new Array(10);<\/p>\n<p>for (i = 0; i &lt; 10; i++) {<\/p>\n<p>tal[i] = i;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Et array erkl\u00e6res alts\u00e5 ved at s\u00e6tte en variabel lig med new Array(). Tallet i parentes angiver array\u2019ets st\u00f8rrelse. Som det ses i for-l\u00f8kken tilg\u00e5s de enkelte elementer i array\u2019et ved at skrive navnet p\u00e5 array\u2019et efterfulgt af elementets position i kantede parenteser. Bem\u00e6rk, at den f\u00f8rste position er 0 \u2013 det betyder, at et array med st\u00f8rrelsen 10 \u2013 som array\u2019et i dette eksempel \u2013 har elementer fra position 0 til og med 9.<\/p>\n<h2>Metoder<\/h2>\n<p>Som det blev beskrevet i kapitel 1, er der i JavaScript ikke forskel p\u00e5 funktioner og procedurer. Det er op til programm\u00f8ren selv at bestemme, om en metode skal v\u00e6re en funktion eller en procedure \u2013 hvis metoden slutter med return, er det en funktion, ellers er det en procedure. Ud over de metoder, som man selv kan lave, har JavaScript en r\u00e6kke indbyggede metoder. Det er uden for dennes bogs rammer at gennemg\u00e5 samtlige metoder \u2013 dog vil de mest almindelige blive brugt i l\u00f8bet af bogen. For en komplet gennemgang af metoderne i JavaScript henvises til <em>Lemay og Moncur<\/em>: JavaScript, Teknisk Forlag. En af de indbyggede metoder er sqrt, som returnerer kvadratroden af et tal.<\/p>\n<p>&nbsp;<\/p>\n<p>b = sqrt (9);<\/p>\n<p>&nbsp;<\/p>\n<p>vil alts\u00e5 tildele variablen b kvadratroden af 9.<\/p>\n<p>&nbsp;<\/p>\n<h2>Udskrift til HTML-siden<\/h2>\n<p>Udskrift til HTML-siden er nok den vigtigste funktionalitet i ASP. Der er jo ikke meget ved at kunne lave noget avanceret p\u00e5 web-serveren, hvis man ikke kan f\u00e5 det vist til brugeren. Derfor findes der i ASP flere m\u00e5der at udskrive til HTML-siden p\u00e5. Den simpleste er blot at skrive den tekst, der skal udskrives, uden for ASP-koden (udenfor &lt;% . . . %&gt;). Nedenst\u00e5ende eksempel udskriver s\u00e5ledes teksten Dette er en test ti gange.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>for (i = 0;i &lt; 10;i++) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Dette er en test<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet viser ogs\u00e5, at man sagtens kan blande ASP- og HTML-kode \u2013 blot skal man huske, at ASP-koden skal omgives af &lt;% og %&gt;, mens HTML-koden skal st\u00e5 udenfor.<\/p>\n<p>Denne fremgangsm\u00e5de er imidlertid ikke nok. Vil man udskrive v\u00e6rdien af en variabel, kan man ikke bruge denne fremgangsm\u00e5de. Som bekendt er HTML statisk, og det er derfor ikke muligt at udskrive dynamiske oplysninger. Hvis man vil udvide eksemplet fra f\u00f8r, m\u00e5 man s\u00e5ledes bruge en anden metode. Denne anden metode er &lt;%=. &lt;%= udskriver v\u00e6rdien af det udtryk eller den variabel, der st\u00e5r umiddelbart efter lighedstegnet. Nedenst\u00e5ende kode viser, hvordan eksemplet fra f\u00f8r kan omskrives.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>for (i = 0;i &lt; 10;i++) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Dette er en test \u2013 i er &lt;%=i%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Denne fremgangsm\u00e5de er dog ikke altid hensigtsm\u00e6ssig. Hvis det eneste, man skal udskrive, er variabler eller udtryk, er fremgangsm\u00e5den besv\u00e6rlig. I disse tilf\u00e6lde kan man i stedet skrive Response.Write. F\u00f8lgende eksempel viser, hvordan man kan udskrive tallene fra et til ti.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>for (i = 1;i &lt; 11;i++) {<\/p>\n<p>Response.Write(i);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Faktisk bliver &lt;%= automatisk erstattet med Response.Write, f\u00f8r ASP-siden bliver fortolket. Dette skal man v\u00e6re opm\u00e6rksom p\u00e5, fordi det betyder, at et semikolon efter den v\u00e6rdi, der skal udskrives, er en fejl, da det bliver erstattet med Response.Write(<em>udtryk<\/em>;), hvilket tydeligvis er forkert.<\/p>\n<h1>Indsendelse af oplysninger<\/h1>\n<p>Som n\u00e6vnt er form\u00e5let med at bruge ASP at tilf\u00f8je dynamik til sit web-sted. Dette betyder, at brugeren skal have mulighed for at p\u00e5virke udseendet af web-stedet. Den mest udbredte m\u00e5de at g\u00f8re dette p\u00e5, er at lade hende udfylde en formular. I dette afsnit vil det blive beskrevet, hvordan man g\u00f8r det. Afsnittet bliver afsluttet med en gennemgang af andre m\u00e5der at lade brugeren angive oplysninger p\u00e5.<\/p>\n<h2>Formularer i HTML<\/h2>\n<p>I ASP spiller formularer en meget vigtig rolle, derfor vil det i dette afsnit blive beskrevet, hvordan man laver formularer i HTML.<\/p>\n<p>I HTML bruger man kommandoen &lt;form&gt; til at angive starten p\u00e5 en formular, og &lt;\/form&gt; til at angive slutningen af en formular. &lt;form&gt;-kommandoen har f\u00f8lgende syntaks:<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;form name=<em>navn <\/em>action=<em>ASP-side <\/em>method=<em>metode<\/em>&gt;<\/p>\n<p>&nbsp;<\/p>\n<p><em>Navn <\/em>angiver formularens navn og er ikke strengt n\u00f8dvendigt. Bruger man JavaScript eller VBScript p\u00e5 klienten, er det n\u00f8dvendigt at give formularen et navn for at kunne tilg\u00e5 de elementer, men det er ikke n\u00f8dvendigt med ASP. <em>ASP-side<\/em> er adressen p\u00e5 den side, der skal behandle de indsendte oplysninger. Hvordan denne side skal laves, bliver beskrevet senere. <em>Metode<\/em> er den m\u00e5de, dataene skal indsendes p\u00e5 \u2013 de forskellige indsendelsesmetoder bliver beskrevet senere.<\/p>\n<p>Formularen kan indeholde en r\u00e6kke forskellige felter, som brugeren kan udfylde. Den mest udbredte felttype er tekstfeltet, som giver brugeren mulighed for at indtaste noget tekst. Nedenst\u00e5ende eksempel viser, hvordan man laver et tekstfelt.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;input type=text name=brugernavn&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet laver et tekstfelt, der har navnet brugernavn. Feltets navn f\u00e5r betydning, n\u00e5r ASP-siden skal laves. Man kan ogs\u00e5 lave tekstfelter, der er specialiserede til at indtaste adgangskoder i. For at lave et af disse skal man \u00e6ndre typen fra text til password. Nedenst\u00e5ende eksempel viser, hvordan man kan lave et felt, hvor brugeren kan indtaste sin adgangskode. Uanset hvilke tegn brugeren indtaster, vil de blive vist som stjerner.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;input type=password name=adgangskode&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Det er imidlertid ikke altid hensigtsm\u00e6ssigt at lade brugeren indtaste alting. Hvis et sp\u00f8rgsm\u00e5l kan besvares med ja eller nej, eller hvis svarmulighederne er begr\u00e6nsede, er det bedre, at lade brugeren v\u00e6lge mellem mulighederne. Hvis et sp\u00f8rgsm\u00e5l kan besvares med ja eller nej, kan man bruge et afkrydsningsfelt. Man laver et afkrydsningsfelt ved at s\u00e6tte input-type til checkbox. Nedenst\u00e5ende eksempel viser hvordan.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;input type=checkbox name=gem&gt; Gem adgangskode<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet viser et afkrydsningsfelt efterfulgt af teksten Gem adgangkode. Hvis man vil have, at afkrydsningsfeltet som standard er afkrydset, kan man tilf\u00f8je ordet checked i input-kommandoen. F\u00f8lgende eksempel laver et afkrydsningsfelt, der som standard er afkrydset.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;input type=checkbox name=gem checked&gt; Gem adgangskode<\/p>\n<p>&nbsp;<\/p>\n<p>Der kan ogs\u00e5 v\u00e6re situationer, hvor man skal lade brugeren v\u00e6lge en af en r\u00e6kke muligheder. I disse tilf\u00e6lde skal man bruge en alternativknap. I HTML laves alternativknapper ved at s\u00e6tte input-typen til radio. Det interessante ved alternativknapper er, at det kun er \u00e9n af en gruppe, der kan v\u00e6re markeret p\u00e5 samme tid. Man angiver, hvilke knapper der h\u00f8rer sammen i en gruppe, ved at give dem det samme navn. For at man kan kende forskel p\u00e5 dem, kan man give dem forskellige v\u00e6rdier. Det g\u00f8res ved at bruge value-v\u00e6rdien. Ligesom man p\u00e5 et afkrydsningsfelt kan angive, at det skal v\u00e6re afkrydset, kan man ogs\u00e5 v\u00e6lge, at en af alternativknapperne skal v\u00e6re markeret. Det g\u00f8res ligeledes med ordet checked.<\/p>\n<p>&nbsp;<\/p>\n<p>Hvilke rettigheder, vil du logges p\u00e5 med?<\/p>\n<p>&lt;input type=radio name=rettigheder value=administrator&gt;Administrator<\/p>\n<p>&lt;input type=radio name=rettigheder value=bruger checked&gt;Bruger<\/p>\n<p>&nbsp;<\/p>\n<p>For at indsende formularen skal man bruge en knap. Denne knap skal have input-typen submit. Knappens value-v\u00e6rdi angiver den tekst, der skal vises p\u00e5 knappen.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;input type=submit value=\u201dLog p\u00e5\u201d&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>For at oprette en formular skal man alts\u00e5 skrive f\u00f8lgende HTML-kode. Bem\u00e6rk, at elementerne er sat ind i en tabel for at g\u00f8re opstillingen p\u00e6nere. De HTML-kommandoer, der udg\u00f8r formularen, er fremh\u00e6vet med fed skrift.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>&lt;form name=login action=login.asp method=get&gt;<\/strong><\/p>\n<p>&lt;table&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Brugernavn&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;input type=text name=brugernavn&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Adgangskode&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;input type=password name=adgangskode&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;input type=checkbox name=gem checked&gt;<\/strong>Gem adgangskode&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td rowspan=2&gt;Hvilke rettigheder,&lt;br&gt;vil du logges p\u00e5 med?&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;input type=radio name=rettigheder value=administrator&gt;Administrator<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;input type=radio name=rettigheder value=bruger checked&gt;<\/strong>Bruger&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td colspan=2 align=center&gt;<strong>&lt;input type=submit value=&#8221;Log p\u00e5&#8221;&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p><strong>&lt;\/form&gt;<\/strong><\/p>\n<p><strong> <\/strong><\/p>\n<p>Det giver en HTML-formular, der ser ud som i figur 3.1.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03011.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-487\" title=\"0301\" src=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03011.png\" alt=\"\" width=\"309\" height=\"172\" srcset=\"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03011.png 309w, https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03011-300x166.png 300w\" sizes=\"auto, (max-width: 309px) 100vw, 309px\" \/><\/a><\/p>\n<p>Figur 3.1: HTML-formular til adgangskontrol.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Indsendelsesmetoder<\/h2>\n<p>Oplysninger, som overf\u00f8res til ASP-sider, sendes via HTTP-protokollen, som beskriver, hvordan oplysninger skal sendes fra browsere til web-servere og tilbage. HTTP-protokollen beskriver flere forskellige m\u00e5der at indsende data p\u00e5 \u2013 de mest udbredte er get og post, som begge vil blive beskrevet i dette afsnit.<\/p>\n<p>N\u00e5r oplysninger indsendes med get-metoden, bliver de f\u00f8jet til adressen p\u00e5 det dokument, de bliver indsendt til. Dokumentets adresse og oplysninger adskilles med et sp\u00f8rgsm\u00e5lstegn. Indsender man eksempelvis oplysningen farve=gul til siden maling.asp, vil adressen komme til at se s\u00e5ledes ud:<\/p>\n<p>&nbsp;<\/p>\n<p>maling.asp?farve=gul<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man indsender mere end \u00e9n oplysning, adskiller man dem med et &amp;-tegn. Det betyder, at en adresse kan komme til at se s\u00e5ledes ud:<\/p>\n<p>&nbsp;<\/p>\n<p>maling.asp?farve=gul&amp;blankhed=2<\/p>\n<p>&nbsp;<\/p>\n<p>Get-metoden har den fordel, at den er forholdsvis let at benytte, og at det er let at se, hvilke data der bliver indsendt. Den har imidlertid ogs\u00e5 en r\u00e6kke ulemper. Eksempelvis har de fleste browsere en maksimal l\u00e6ngde af adressefeltet \u2013 typisk p\u00e5 omkring 200 tegn. Det betyder, at man ikke kan indsende oplysninger, der fylder mere end 200 tegn. En anden ulempe ved get-metoden er, at man kan se oplysningerne i adressefeltet. Det betyder for eksempel, at en brugers adgangskode vil blive vist, hvis den indsendes med get.<\/p>\n<p>Post-metoden har ikke disse ulemper. Her bliver oplysningerne sendt i selve foresp\u00f8rgslen og ikke som en del af adressen. Det betyder, at de ikke er synlige for brugeren. Post-metoden har heller ingen begr\u00e6nsninger med hensyn til datast\u00f8rrelse og kan derfor bruges ved indsendelse af store datam\u00e6ngder.<\/p>\n<p>Dette kunne umiddelbart tyde p\u00e5, at man altid skal benytte post-metoden, men get-metoden giver nogle muligheder, som man ikke har med post. For eksempel kan man have brug for at angive oplysninger i et link i en HTML-side. Dette kan man ikke med post, men med get er det muligt, fordi man kan skrive oplysningerne i adressen.<\/p>\n<p>Vil man lave en henvisning til en side, der anvender get, kan man blot i sin HTML-kode skrive &lt;a href=&#8221;maling.asp?farve=gul&#8221;&gt;. Bruger man derimod post, findes der ingen m\u00e5de, hvorp\u00e5 man i en henvisning kan angive parametrene.<\/p>\n<p>Udover disse praktiske grunde til at v\u00e6lge metode, findes der nogle anvisninger, man b\u00f8r f\u00f8lge. Man b\u00f8r kun bruge get, n\u00e5r indsendelsen kan foretages flere gange med det samme resultat. Det kan eksempelvis v\u00e6re ved en s\u00f8gning, hvor s\u00f8gning efter det samme ord giver det samme resultat hver gang. Kan indsendelsen derimod ikke gentages med det samme resultat, b\u00f8r man bruge post. Det kan for eksempel v\u00e6re ved tilmelding, hvor gentagen indsendelse vil medf\u00f8re, at man bliver tilmeldt flere gange. Selv om dette naturligvis kun er retningslinier for, hvilken metode man b\u00f8r v\u00e6lge, er det en god ide at overholde dem, da de fleste browsere forventer, at de bliver overholdt.<\/p>\n<h2>Indsendelse med get-metoden<\/h2>\n<p>N\u00e5r man klikker p\u00e5 knappen Log p\u00e5, skifter browserens adressefelt til adressen p\u00e5 den side, der skal behandle formularens data. I dette eksempel er det login.asp. Fordi eksemplet bruger indsendelsesmetoden get, vil parametrene ogs\u00e5 blive vist i adressen. Det betyder, at adressefeltet kan komme til at se s\u00e5ledes ud:<\/p>\n<p>&nbsp;<\/p>\n<p>login.asp?brugernavn=kh&amp;adgangskode=sesam&amp;gem=on&amp;rettigheder=bruger<\/p>\n<p>&nbsp;<\/p>\n<p>Der er ikke meget ved at kunne indsende oplysninger, hvis man ikke kan behandle dem, n\u00e5r man modtager dem. Det skal der en ASP-side til.<\/p>\n<p>For at hente parametre ud fra den foresp\u00f8rgsel, browseren sendte, bruger man Request-objektet. Dette objekt har en metode, der hedder QueryString. Denne metode bruges til at pille parametre ud af foresp\u00f8rgslens <em>query string<\/em> \u2013 det er den del, der st\u00e5r efter sp\u00f8rgsm\u00e5lstegnet i adresselinien. Hvis man vil have v\u00e6rdien af parametren brugernavn fra eksemplet, kan man alts\u00e5 skrive<\/p>\n<p>&nbsp;<\/p>\n<p>brugernavn = Request.QueryString(&#8220;brugernavn&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man vil lave et simpelt eksempel, der blot udskriver de oplysninger, der bliver indsendt, kan man alts\u00e5 udskrive brugernavnet og adgangskoden med f\u00f8lgende linier:<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%=Request.QueryString(&#8220;brugernavn&#8221;)%&gt;<\/p>\n<p>&lt;%=Request.QueryString(&#8220;adgangskode&#8221;)%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Det er straks lidt mere kompliceret at behandle v\u00e6rdien af feltet Gem adgangskode. Denne v\u00e6rdi bliver nemlig kun sendt med, hvis den er markeret. Hvis man fors\u00f8ger at f\u00e5 v\u00e6rdien p\u00e5 en parameter, der ikke findes, f\u00e5r man null tilbage. Det vil sige, at man \u2013 ved at kontrollere om Request.QueryString(&#8220;gem&#8221;) returnerer null \u2013 kan se, om parameteren er sat. Det betyder, at man kan bruge f\u00f8lgende linier til at kontrollere og udskrive, om adgangskoden skal gennes.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (Request.QueryString(&#8220;gem&#8221;) != null) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Bem\u00e6rk, at der her bruges Response.Write til at udskrive til HTML-siden i stedet for &lt;%=.<\/p>\n<p>De to alternativknapper, der bruges til at angive rettigheder, er ogs\u00e5 lidt komplicerede at behandle. Her er det igen n\u00f8dvendigt at kontrollere v\u00e6rdien af parametren rettigheder, for at man kan se, hvilke rettigheder der er valgt. Det g\u00f8r nedenst\u00e5ende kode.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (Request.QueryString(&#8220;bruger&#8221;)) {<\/p>\n<p>Response.Write(&#8220;Brugerrettigheder&#8221;)<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Administratorrettigheder&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>For at det kommer til at se p\u00e6nt ud, skal udskrifterne naturligvis integreres i HTML-kode. Det kan man g\u00f8re p\u00e5 nedenst\u00e5ende m\u00e5de \u2013 igen er ASP-koden fremh\u00e6vet med fed skrift.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>&lt;% @Language = JavaScript %&gt;<\/strong><\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;head&gt;<\/p>\n<p>&lt;title&gt;Eksempel&lt;\/title&gt;<\/p>\n<p>&lt;\/head&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>&lt;b&gt;F\u00f8lgende oplysninger blev indsendt:&lt;\/b&gt;&lt;br&gt;<\/p>\n<p>&lt;table&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Brugernavn&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;%=Request.QueryString(&#8220;brugernavn&#8221;)%&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Adgangskode&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;%=Request.QueryString(&#8220;adgangskode&#8221;)%&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Gem password&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p><strong>&lt;%<\/strong><\/p>\n<p><strong> if (Request.QueryString(&#8220;gem&#8221;) != null) {<\/strong><\/p>\n<p><strong> <\/strong><strong>Response.Write(&#8220;Ja&#8221;);<\/strong><\/p>\n<p><strong> } else {<\/strong><\/p>\n<p><strong> Response.Write(&#8220;Nej&#8221;);<\/strong><\/p>\n<p><strong> }<\/strong><\/p>\n<p><strong>%&gt;<\/strong><\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Rettigheder&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p><strong>&lt;%<\/strong><\/p>\n<p><strong> if (Request.QueryString(&#8220;bruger&#8221;)) {<\/strong><\/p>\n<p><strong> <\/strong><strong>Response.Write(&#8220;Brugerrettigheder&#8221;)<\/strong><\/p>\n<p><strong> } else {<\/strong><\/p>\n<p><strong> Response.Write(&#8220;Administratorrettigheder&#8221;);<\/strong><\/p>\n<p><strong> }<\/strong><\/p>\n<p><strong>%&gt;<\/strong><\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<h2>Indsendelse med post-metoden<\/h2>\n<p>Som n\u00e6vnt tidligere har get-metoden en r\u00e6kke problemer \u2013 det s\u00e5s ogs\u00e5 i det forrige eksempel, hvor adgangskoden fremgik af browserens adressefelt. Derfor vil det i dette afsnit blive gennemg\u00e5et, hvordan man indsender data med post-metoden.<\/p>\n<p>Det f\u00f8rste sted, man skal \u00e6ndre, er HTML-formularen. Her skal erkl\u00e6ringen af formularen \u00e6ndres, s\u00e5 metoden s\u00e6ttes til post i stedet for get. I eksemplet fra f\u00f8r vil det betyde, at formularen skal erkl\u00e6res s\u00e5ledes:<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;form name=login action=login.asp method=post&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Der skal ikke foretages \u00e6ndringer i resten af HTML-formularen.<\/p>\n<p>Der skal ogs\u00e5 foretages \u00e6ndringer i ASP-siden. Som det blev n\u00e6vnt i forrige afsnit, bruges Request.QueryString til at f\u00e5 oplysninger om den del af adressen, der st\u00e5r efter sp\u00f8rgsm\u00e5lstegnet. Ved post-metoden findes parametrene slet ikke i adresselinien, s\u00e5 derfor kan denne fremgangsm\u00e5de naturligvis ikke bruges. I stedet skal man bruge den metode, der hedder Request.Form. Ligesom tidligere angiver man navnet p\u00e5 parametren som argument til metoden. Det betyder, at ASP-siden fra get-eksemplet kommer til at se s\u00e5ledes ud, hvis man bruger post som indsendelsesmetode. Forskellene fra get-metoden til post-metoden er fremh\u00e6vet med fed skrift.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;% @Language = JavaScript %&gt;<\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;head&gt;<\/p>\n<p>&lt;title&gt;Eksempel&lt;\/title&gt;<\/p>\n<p>&lt;\/head&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>&lt;b&gt;F\u00f8lgende oplysninger blev indsendt:&lt;\/b&gt;&lt;br&gt;<\/p>\n<p>&lt;table&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Brugernavn&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;%=Request.Form(&#8220;brugernavn&#8221;)%&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Adgangskode&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<strong>&lt;%=Request.Form(&#8220;adgangskode&#8221;)%&gt;<\/strong>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Gem password&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p><strong>if (Request.Form(&#8220;gem&#8221;) != null) {<\/strong><\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Rettigheder&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p><strong> if (Request.Form(&#8220;bruger&#8221;)) {<\/strong><\/p>\n<p>Response.Write(&#8220;Brugerrettigheder&#8221;)<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Administratorrettigheder&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Som det ses er hovedparten af ASP-koden den samme. Det er udelukkende de steder, hvor oplysningerne fra formularen skal bruges, der er \u00e6ndringer. Eksemplet viser ogs\u00e5, at reglerne for, hvilke oplysninger der bliver indsendt fra formularen, er de samme, ligegyldigt om man bruger get eller post som indsendelsesmetode.<\/p>\n<h1>Scripts og applikationer<\/h1>\n<p>Det er nu blevet gennemg\u00e5et, hvordan man kan bruge forskellige af ASPs muligheder med scriptsprog. Det er imidlertid ikke alt, der kan lade sig g\u00f8re fra et scriptsprog. Vil man for eksempel lave avancerede ting, der kr\u00e6ver adgang til filer eller andre ressourcer p\u00e5 computeren, kommer scriptsprogene til kort \u2013 de fleste scriptsprog er s\u00e5 generelle, at de ikke har funktionalitet til disse omr\u00e5der, der afh\u00e6nger meget af den computer, de bliver afviklet p\u00e5, og af det program der fortolker dem.<\/p>\n<p>Da det ville v\u00e6re fuldst\u00e6ndigt uacceptabelt ikke at kunne g\u00f8re disse ting fra ASP, har man gjort det muligt at integrere ActiveX-komponenter i ASP. Det betyder, at man kan skrive en ActiveX-komponent i et mere avanceret programmeringssprog (som for eksempel C++) og derefter benytte komponentens funktionalitet fra et scriptsprog.<\/p>\n<p>Det skal bem\u00e6rkes, at brugen af ActiveX-komponenter i denne sammenh\u00e6ng ikke g\u00f8r web-stedet browserafh\u00e6ngigt. Selv om det kun er Microsoft Internet Explorer, der kan afvikle ActiveX-komponenter, har det ikke betydning for ASP-sider med ActiveX-komponenter, da komponenterne bliver afviklet p\u00e5 serveren, og s\u00e5ledes slet ikke ses af de bes\u00f8gendes browsere.<\/p>\n<p>I forhold til at lave scripts med et scriptsprog og ASP er det forholdsvist kompliceret at lave ActiveX-komponenter, og en beskrivelse af udviklingen af ActiveX-komponenter ligger udenfor rammerne af denne bog. Heldigvis er det ikke n\u00f8dvendigt selv at udvikle komponenterne \u2013 der er en del inkluderet i Internet Information Server, og derudover kan man finde en del p\u00e5 Internet. Nogle af disse er gratis, mens andre er kommercielle.<\/p>\n<p>I resten af dette kapitel vil nogle af de indbyggede komponenter blive beskrevet. Det drejer sig om komponenter til at vise tilf\u00e6ldigt indhold, reklamer, indholdsfortegnelser og lignende. I de f\u00f8lgende kapitler i denne bog vil der ogs\u00e5 blive beskrevet ActiveX-komponenter. I kapitel 4 bliver det s\u00e5ledes beskrevet, hvordan man kan integrere egne ActiveX-komponenter eller ActiveX-komponenter fra tredjepart i ASP. N\u00e5r databasetilgang bliver gennemg\u00e5et i kapitel 5, er det ogs\u00e5 ved hj\u00e6lp af ActiveX-komponenter.<\/p>\n<p>Det er ikke alle de indbyggede komponenter, der bliver gennemg\u00e5et i denne bog \u2013 det er der simpelthen ikke plads til. Til geng\u00e6ld er der en beskrivelse af alle komponenterne i kapitlerne 7, 8 og 9.<\/p>\n<p>N\u00e5r man skal bruge en ActiveX-komponent i ASP, skal man lave et objekt ud af den. Det g\u00f8res ved at bruge metoden CreateObject. Denne metode findes i Server-objektet, og som parameter skal man angive navnet p\u00e5 den ActiveX-komponent, man skal bruge. Hvis man s\u00e5ledes vil bruge en ActiveX-komponent, der hedder activex.komponent skal man alts\u00e5 skrive<\/p>\n<p>&nbsp;<\/p>\n<p>Server.CreateObject(&#8220;activex.komponent&#8221;);<\/p>\n<h1>Tilf\u00e6ldigt indhold<\/h1>\n<p>Det kendes allerede fra Microsoft Windows \u2013 de sm\u00e5 tips, der bliver vist, n\u00e5r computeren startes. Det tip, der bliver vist, er blot et af en st\u00f8rre m\u00e6ngde af tips. Computeren v\u00e6lger selv, hvilket tip der skal vises.<\/p>\n<p>I ASP er den samme teknik til r\u00e5dighed. Her skal man bruge den komponent, der hedder <em>content rotator<\/em>. Content rotator fungerer p\u00e5 den m\u00e5de, at den indl\u00e6ser en fil, der indeholder alle tippene, og v\u00e6lger et tilf\u00e6ldigt. Som standard er content rotator-komponenten installeret under navnet IISSample.ContentRotator. Det betyder, at man kan lave et content rotator-objekt med f\u00f8lgende linie:<\/p>\n<p>&nbsp;<\/p>\n<p>tip = Server.CreateObject(&#8220;IISSample.ContentRotator&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>Variablen tip vil herefter v\u00e6re et content rotator-objekt. For at f\u00e5 objektet til at v\u00e6lge et tilf\u00e6ldigt tip, skal man kalde metoden ChooseContent. Som n\u00e6vnt tidligere skal man som parameter til denne metode give navnet p\u00e5 den fil, der indeholder tippene. Hvis den filer hedder \/data\/tips.txt, skal man alts\u00e5 skrive<\/p>\n<p>&nbsp;<\/p>\n<p>dagens_tip = tip.ChooseContent(&#8220;\/data\/tips.txt&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>Variablen dagens_tip vil nu indeholde den tekst, der udg\u00f8r dagens tip.<\/p>\n<p>Den fil, der indeholder tippene, skal have et tip p\u00e5 hver linie \u2013 ellers kan content rotator ikke finde ud af at v\u00e6lge mellem dem. I dette eksempel kunne filen se s\u00e5ledes ud:<\/p>\n<p>&nbsp;<\/p>\n<p>brug tandtr\u00e5d.<\/p>\n<p>se dig for, f\u00f8r du g\u00e5r over vejen.<\/p>\n<p>skift gear, n\u00e5r du cykler op ad bakke.<\/p>\n<p>sluk for vandet, mens du b\u00f8rster t\u00e6nder.<\/p>\n<p>&nbsp;<\/p>\n<p>Det er imidlertid ikke nok at kunne v\u00e6lge et tilf\u00e6ldigt tip, man skulle ogs\u00e5 gerne kunne vise det til brugeren. Nedenst\u00e5ende eksempel viser, hvordan man kan pr\u00e6sentere sit tip for brugeren p\u00e5 en p\u00e6n m\u00e5de.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%@ language=JavaScript %&gt;<\/p>\n<p>&lt;center&gt;<\/p>\n<p>&lt;table cellspacing=0&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;td align = center bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&lt;b&gt;Et godt r\u00e5d&#8230;&lt;\/b&gt;&lt;\/font&gt;&lt;\/td&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;td bgcolor=#ffffff&gt;<\/p>\n<p>&lt;br&gt;<\/p>\n<p>&lt;%<\/p>\n<p>tip = Server.CreateObject(&#8220;IISSample.ContentRotator&#8221;);<\/p>\n<p>dagens_tip = tip.ChooseContent(&#8220;\/data\/tips.txt&#8221;);<\/p>\n<p>Response.write(&#8220;&#8230;&#8221; + dagens_tip);<\/p>\n<p>%&gt;<\/p>\n<p>&lt;br&gt;<\/p>\n<p>&lt;br&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;td bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;td width=5 bgcolor=#aaaaaa&gt;&lt;font size = -1&gt;&amp;nbsp;&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p>&lt;\/center&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Dette eksempel giver et dokument, som det der kan ses i figur 3.2.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03021.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-486\" title=\"0302\" src=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03021.png\" alt=\"\" width=\"346\" height=\"287\" srcset=\"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03021.png 346w, https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03021-300x248.png 300w\" sizes=\"auto, (max-width: 346px) 100vw, 346px\" \/><\/a><\/p>\n<p>Figur 3.2: Et dokument med et tilf\u00e6ldigt tip.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><script type=\"text\/javascript\"><!--\ngoogle_ad_client = \"ca-pub-3400894606969585\";\n\/* Bibliotek - ASP *\/\ngoogle_ad_slot = \"2386722770\";\ngoogle_ad_width = 336;\ngoogle_ad_height = 280;\n\/\/-->\n<\/script><br \/>\n<script type=\"text\/javascript\"\nsrc=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">\n<\/script><\/p>\n<p>&nbsp;<\/p>\n<h1>Oplysninger om browseren<\/h1>\n<p>Et af de store problemer ved web-design er, at det ikke er alle browsere, der kan det samme. Ikke alene er der forskel p\u00e5 den m\u00e5de. de to mest udbredte browsere (Microsoft Internet Explorer og Netscape Navigator) fungerer \u2013 de findes ogs\u00e5 i forskellige versioner. Hvis man vil bruge nogle af de mere avancerede web-teknikker \u2013 som for eksempel rammer, klient-scripts og Java-appletter \u2013 risikerer man, at ens web-sted ikke er tilg\u00e6ngeligt for alle. V\u00e6lger man i stedet at bygge sin side, s\u00e5 den er tilg\u00e6ngelig for alle, medf\u00f8rer det, at siden bliver kedelig, og at de, der har nye browsere, ikke f\u00e5r udnyttet disses muligheder fuldt ud.<\/p>\n<p>L\u00f8sningen p\u00e5 dette problem er at registrere, hvilken browser den bes\u00f8gende har, og stille en side til r\u00e5dighed, der passer til browseren. N\u00e5r man bruger ASP, er det simpelt at f\u00e5 oplysninger om browseren og dens egenskaber. Man skal blot benytte den komponent, som hedder MSWC.BrowserType. Man opretter et browsertype-objekt med CreateObject-metoden. Objektet har en r\u00e6kke variabler, som indeholder oplysninger om browseren og dens egenskaber. Nedenst\u00e5ende eksempel viser nogle af de oplysninger, man kan f\u00e5 fra browsertype.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%@ language=JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>browser = Server.CreateObject(&#8220;MSWC.BrowserType&#8221;);<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;center&gt;Browser: &lt;%=browser.browser%&gt;&amp;nbsp;&lt;%=browser.version%&gt;&lt;br&gt;&lt;\/center&gt;<\/p>\n<p>&lt;center&gt;&lt;table border=1&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Rammer&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p>if (browser.frames) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Tabeller&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p>if (browser.tables) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;Java&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p>if (browser.javaapplets) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;VBScript&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p>if (browser.vbscript) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;JavaScript&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&lt;%<\/p>\n<p>if (browser.javascript) {<\/p>\n<p>Response.Write(&#8220;Ja&#8221;);<\/p>\n<p>} else {<\/p>\n<p>Response.Write(&#8220;Nej&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p>&lt;\/center&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Figur 3.3 viser ASP-programmet afviklet i Netscape Navigator.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03031.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-485\" title=\"0303\" src=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03031.png\" alt=\"\" width=\"309\" height=\"358\" srcset=\"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03031.png 309w, https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/03031-258x300.png 258w\" sizes=\"auto, (max-width: 309px) 100vw, 309px\" \/><\/a><\/p>\n<p>Figur 3.3: Dokument med oplysninger om Netscape Navigator.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Tabel 3.1 viser de variabler, der findes p\u00e5 browsertype-objektet.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"326\" valign=\"top\"><strong>Variabel<\/strong><\/td>\n<td width=\"326\" valign=\"top\"><strong>Betydning<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Jscript<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren Jscript?<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Vbscript<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren VBScript?<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Javaapplets<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren Java-appletter?<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Frames<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren rammer?<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">Tables<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren tabeller?<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">BackgroundSounds<\/td>\n<td width=\"326\" valign=\"top\">Underst\u00f8tter   browseren baggrundsmusik?<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tabel 3.1: Variabler i BrowserType-objektet.<\/p>\n<p>&nbsp;<\/p>\n<p>Der er imidlertid ikke meget ved at kunne fort\u00e6lle brugeren, hvilken browser hun har \u2013 det ved hun sikkert allerede. Det bliver f\u00f8rst interessant, n\u00e5r ASP-siderne tager hensyn til brugerens browser. Nedenst\u00e5ende eksempel viser, hvordan man kan pr\u00e6sentere information p\u00e5 forskellige m\u00e5der alt efter, om browseren underst\u00f8tter tabeller.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%@Language = JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>browser = Server.CreateObject(&#8220;MSWC.BrowserType&#8221;);<\/p>\n<p>tables = browser.tables;<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tables) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;table&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Navn<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tables) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Anders Andersen<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tables) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;tr&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>} else {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;br&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Adresse<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tables) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;td&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Borgergade 99<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tables) {<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/td&gt;<\/p>\n<p>&lt;\/tr&gt;<\/p>\n<p>&lt;\/table&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<h1>Dynamisk indholdsfortegnelse<\/h1>\n<p>Hvis man har et omfattende web-sted, er det en god ide at give de bes\u00f8gende en oversigt over web-stedet. Det kan man g\u00f8re ved en slags indholdsfortegnelse. Det er imidlertid en stor opgave at vedligeholde en indholdsfortegnelse over et stort web-sted. Derfor kan man bruge komponenten <em>Content Linking<\/em>. Denne komponent holder styr p\u00e5 alle de sider, web-stedet best\u00e5r af. Til hver web-side er der tilknyttet en URL (adressen p\u00e5 web-siden) og en beskrivelse af web-siden. Oplysningerne om siderne i indholdsfortegnelsen f\u00e5r komponenten fra en tekstfil \u2013 mere om den senere. Fra programmet er det muligt at bede komponenten om n\u00e6ste og forrige URL og n\u00e6ste og forrige beskrivelse. Man kan ogs\u00e5 f\u00e5 at vide, hvor mange sider der er registreret i indholdsfortegnelsen, ligesom man kan f\u00e5 positionen p\u00e5 den aktuelle side. Nedenst\u00e5ende tabel viser, hvilke metoder content linking-komponenten har.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"326\" valign=\"top\"><strong>Metode<\/strong><\/td>\n<td width=\"326\" valign=\"top\"><strong>Beskrivelse<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetListCount(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer antallet af   sider i den listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetListIndex(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer positionen af   den aktuelle side i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetNextURL(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer adressen p\u00e5 den   n\u00e6ste side i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetNextDescription(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer beskrivelsen af   den n\u00e6ste side i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetPreviousURL(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer adressen p\u00e5 den   forrige side i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetPreviousDescription(<em>filnavn<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer beskrivelsen af   den forrige side i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetNthURL(<em>filnavn, n<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer adressen p\u00e5   siden p\u00e5 position <em>n<\/em> i listen.<\/td>\n<\/tr>\n<tr>\n<td width=\"326\" valign=\"top\">GetNthDescription(<em>filnavn, n<\/em>)<\/td>\n<td width=\"326\" valign=\"top\">Returnerer beskrivelsen af   siden p\u00e5 position <em>n<\/em> i listen.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Tabel 3.2: Metoder i ContentLinking-objektet.<\/p>\n<p>&nbsp;<\/p>\n<p>N\u00e5r man bruger en af de metoder, der henter oplysninger om siden p\u00e5 en bestemt position, er det vigtigt at vide, at den f\u00f8rste side i listen har position 1 (og ikke position 0, som man m\u00e5ske kunne forvente).<\/p>\n<h2>Opbygning af indholdsfilen<\/h2>\n<p>For at content linking-komponenten kan forst\u00e5 indholdsfortegnelsen, skal den fil, oplysningerne ligger i, have en bestemt opbygning. Hver side skal beskrives p\u00e5 en linie for sig. F\u00f8rst skal adressen p\u00e5 siden skrives. Dette kan blot v\u00e6re navnet p\u00e5 den fil, der indeholder siden. Efter sidens navn skal der v\u00e6re et tabulatortegn (det <em>skal<\/em> v\u00e6re et tabulatortegn \u00ad\u2013 det virker ikke, hvis man bruger mellemrum). Herefter kan beskrivelsen af siden skrives. S\u00e6tter man endnu et tabulatortegn, kan man ogs\u00e5 tilf\u00f8je en kommentar til linien \u2013 brugeren ser ikke denne kommentar, og den er ikke n\u00f8dvendig, men kan v\u00e6re rar at have, hvis indholdsfortegnelsen indeholder mange sider.<\/p>\n<p>Formatet af filen er alts\u00e5 s\u00e5ledes<\/p>\n<p>&nbsp;<\/p>\n<p>sidenavn\u00a0\u00a0 beskrivelse\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 kommentarer<\/p>\n<p>&nbsp;<\/p>\n<p>Nedenst\u00e5ende eksempel viser, hvordan en fil med oplysninger om en indholdsfortegnelse kan opbygges.<\/p>\n<p>&nbsp;<\/p>\n<p>indeks.HTML\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Velkomstsiden\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Her starter de bes\u00f8gende<\/p>\n<p>priser.HTML\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Prisliste over alle vores varer<\/p>\n<p>nyepriser.HTML\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Priser p\u00e5 vores nyeste varer<\/p>\n<p>tilbud.HTML\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Denne uges tilbud\u00a0\u00a0\u00a0\u00a0 Husk at opdatere hver uge!<\/p>\n<h2>Om filnavne<\/h2>\n<p>Som n\u00e6vnt tidligere skal man angive navnet p\u00e5 indholdsfilen i metodekaldene i content linking-objektet. Der er dog nogle ting, man skal vide om filnavne i forbindelse med ASP.<\/p>\n<p>I ASP opererer man med to forskellige slags filnavne: <em>fysiske <\/em>filnavne og <em>virtuelle <\/em>filnavne. Et fysisk filnavn er det navn, en fil har i virkeligheden \u2013 det vil v\u00e6re det navn, man for eksempel kan finde filen under i Windows Stifinder. De virtuelle navne er de navne, filerne har i web-verdenen. Det er disse navne, man bruger for at finde filerne i sin web-browser.<\/p>\n<p>Hvis en fil hedder priser.HTML og ligger i biblioteket c:\\web\\oplysninger, vil dens fysiske navn v\u00e6re c:\\web\\oplysninger\\priser.HTML. Hvis biblioteket c:\\web\\oplysninger p\u00e5 web-serveren er sat op til at svare til stien \/oplysninger, vil filens virtuelle navn v\u00e6re \/oplysninger\/priser.HTML.<\/p>\n<p>Derudover kan man skelne mellem absolutte og relative filnavne. Et absolut filnavn angiver et filnavn, som entydigt udpeger en fil \u2013 det kan eksempelvis v\u00e6re c:\\web\\oplysninger\\priser.HTML. Her kan der ikke v\u00e6re tvivl om, hvilken fil der angives.<\/p>\n<p>Bruger man i stedet et relativt filnavn, kan man ikke direkte se, hvilken fil der angives. Det kommer nemlig an p\u00e5, hvilket bibliotek der er det aktuelle. Hvis det aktuelle bibliotek er c:\\web\\oplysninger, og man angiver navnet priser.HTML, vil det v\u00e6re c:\\web\\oplysninger\\priser.HTML, der er tale om. Er det aktuelle bibliotek i stedet c:\\web, og man angiver priser.HTML, vil det v\u00e6re filen c:\\web\\priser.HTML, der angives. Man kan angive filer i andre biblioteker end det aktuelle ved at angive biblioteksnavnet foran filnavnet \u2013 eksempelvis data\/oplysninger.HTML, der angiver filen oplysninger.HTML i biblioteket data, der er et underbibliotek til det aktuelle bibliotek.<\/p>\n<p>De fleste steder m\u00e5 man selv v\u00e6lge, hvordan man vil angive, hvilken fil, der skal bruges, men n\u00e5r man skal angive adresser, kan der v\u00e6re restriktioner. I den fil, der indeholder oplysninger om indholdsfortegnelsen, m\u00e5 man s\u00e5ledes kun angive virtuelle eller relative adresser.<\/p>\n<h2>Generering af indholdsfortegnelse<\/h2>\n<p>For at f\u00e5 dataene i indholdsfilen \u00e6ndret til HTML-kode, som brugeren kan se, skal man f\u00f8rst lave et objekt af content linking-komponenten. Komponenten hedder MSWC.NextLink, og man laver et objekt af den med kommandoen Server.CreateObject(&#8220;MSWC.NextLink&#8221;);<\/p>\n<p>Nedenst\u00e5ende eksempel viser, hvordan man kan lave en indholdsfortegnelse med content linking-komponenten.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;% @Language=JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>&lt;h1&gt;Indhold&lt;\/h1&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>content = Server.CreateObject(&#8220;MSWC.NextLink&#8221;);<\/p>\n<p>for (i = 1; i &lt;= content.GetListCount(&#8220;data\/indhold.txt&#8221;); i++) {<\/p>\n<p>Response.write(&#8220;&lt;A HREF = \\&#8221;&#8221;);<\/p>\n<p>Response.write(content.getNthURL(&#8220;data\/indhold.txt&#8221;, i));<\/p>\n<p>Response.write(&#8220;\\&#8221;&gt;&#8221;);<\/p>\n<p>Response.write(content.getNthDescription(&#8220;data\/indhold.txt&#8221;, i));<\/p>\n<p>Response.write(&#8220;&lt;\/A&gt;&lt;BR&gt;\u00a0\u00a0 &#8220;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<h1>Viderestilling<\/h1>\n<p>Selv om brugeren har valgt at se en bestemt side, kan det godt v\u00e6re, at det i virkeligheden er en anden, brugeren skal se. Det kan for eksempel g\u00e6lde, hvis den side, brugeren fors\u00f8ger at hente, er blevet flyttet, eller hvis brugeren ikke opfylder nogle betingelser. Man kan eksempelvis kontrollere, at brugeren har indtastet sit kodeord rigtigt, og hvis ikke sende vedkommende videre til en fejlside. Man kan ogs\u00e5 bruge teknikken til at sikre, at brugerne starter p\u00e5 den rigtige side p\u00e5 web-stedet.<\/p>\n<p>Viderestilling \u2013 eller omdirigering \u2013 sker ved hj\u00e6lp af metoden Redirect, der findes i Response-objektet. Som parameter til denne metode giver man blot adressen p\u00e5 den side, brugeren skal sendes videre til \u2013 det beh\u00f8ver ikke engang at v\u00e6re en side p\u00e5 ens eget web-sted.<\/p>\n<p>Muligheden for at dirigere brugeren videre til en side p\u00e5 et andet web-sted, kan blandt andet bruges til at lave statistik. Hvis man eksempelvis har reklamer p\u00e5 sine sider, kan man lave et ASP-dokument, der registrerer, at der er blevet klikket p\u00e5 en reklame, hvorefter brugeren sendes til annonc\u00f8rens side. Nedenst\u00e5ende eksempel viser hvordan.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;% @Language=JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>ad = Request.QueryString(&#8220;ad&#8221;);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Registrer, at der er blevet klikket p\u00e5 annoncen.<\/p>\n<p>\/\/ Hvordan man kan g\u00f8re dette gennemg\u00e5s senere.<\/p>\n<p>&nbsp;<\/p>\n<p>Response.Redirect(Request.QueryString(&#8220;url&#8221;));<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet skal have to parametre: ad, der angiver, hvilken annonce der er blevet klikket p\u00e5, og url, der angiver, hvilken side brugeren skal sendes til. Hvis man gemmer filen som Redirect.asp, kan man bruge den med f\u00f8lgende link<\/p>\n<p>&nbsp;<\/p>\n<p>redirect.asp?ad=1&amp;url=http:\/\/www.tekniskforlag.dk<\/p>\n<p>&nbsp;<\/p>\n<p>Dette link vil registrere, at der er klikket p\u00e5 annonce nummer 1 og derefter sende brugeren videre til www.tekniskforlag.dk.<\/p>\n<p>Ovenst\u00e5ende eksempel er imidlertid forholdsvis simpelt. Det viser nemlig ikke en af de ting, man skal v\u00e6re opm\u00e6rksom p\u00e5, n\u00e5r man bruger Redirect-metoden. Man kan ikke foretage en viderestilling, hvis man allerede har skrevet noget af HTML-siden (brugt &lt;%= eller Response.Write). Selv om man som hovedregel s\u00e5ledes skal kontrollere, om brugeren skal viderestilles, f\u00f8r man begynder at lave HTML-kode, kan man omg\u00e5 reglen. Man kan nemlig slette det, man tidligere har skrevet. Det g\u00f8r man ved at bruge metoden Response.Clear. For at kunne bruge Clear-metoden skal man bruge <em>buffering<\/em>. Buffering bliver gennemg\u00e5et i n\u00e6ste afsnit \u2013 p\u00e5 nuv\u00e6rende tidspunkt er det nok at vide, at man sl\u00e5r buffering til ved at skrive Response.Buffer = true. F\u00f8lgende eksempel viser, hvordan man kan bruge Clear-metoden til at viderestille, selv om man allerede har skrevet noget af HTML-siden.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;% @Language = JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>Response.buffer = true;<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>Beregninger med de tal, du indtastede:&lt;br&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>tal1 = Request.QueryString(&#8220;tal1&#8221;);<\/p>\n<p>tal2 = Request.QueryString(&#8220;tal2&#8221;);<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%=tal1%&gt; + &lt;%=tal2%&gt; = &lt;%=tal1+tal2%&gt;&lt;br&gt;<\/p>\n<p>&lt;%=tal1%&gt; &#8211; &lt;%=tal2%&gt; = &lt;%=tal1-tal2%&gt;&lt;br&gt;<\/p>\n<p>&lt;%=tal1%&gt; * &lt;%=tal2%&gt; = &lt;%=tal1*tal2%&gt;&lt;br&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>if (tal2 == 0) {<\/p>\n<p>Response.Clear();<\/p>\n<p>Response.Redirect(&#8220;error.asp&#8221;);<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%=tal1%&gt; : &lt;%=tal2%&gt; = &lt;%=tal1\/tal2%&gt;&lt;br&gt;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet arbejder p\u00e5 to tal, der gives som parametre. Der vises en r\u00e6kke beregninger med de to tal. For at sikre, at divisionen g\u00e5r godt, er man n\u00f8dt til at kontrollere, at det tal, der divideres med, ikke er 0. Er tallet 0, bliver brugeren sendt videre til en fejlside.<\/p>\n<h2>Buffering<\/h2>\n<p>Buffering giver ASP-programm\u00f8ren mulighed for at kontrollere, hvorn\u00e5r brugeren modtager den side, ASP-dokumentet genererer. N\u00e5r buffering er sl\u00e5et til, bliver den genererede side opbevaret p\u00e5 serveren, indtil hele dokumentet er genereret. Er buffering ikke sl\u00e5et til \u2013 hvilket er standardindstillingen \u2013 bliver HTML-siden sendt til brugeren, efterh\u00e5nden som den bliver genereret. Bem\u00e6rk dog at buffering i ASP 3,0 er sl\u00e5et til som standard.<\/p>\n<p>Dette havde ikke umiddelbart v\u00e6ret interessant, hvis ikke der havde v\u00e6ret metoder, som kan bruges til at sende en del af siden p\u00e5 et bestemt tidspunkt. Disse metoder er Flush og End. Flush bruges til at sende den del af HTML-dokumentet, der er skrevet p\u00e5 det tidspunkt, metoden kaldes, mens End bruges til at sende HTML-dokumentet og samtidig indikere, at dokumentet er f\u00e6rdigt. N\u00e5r ASP-programmet kommer til et End-metodekald, stopper det \u2013 det vil sige, at eventuelle linier derefter ikke vil blive udf\u00f8rt.<\/p>\n<p>I forbindelse med buffering findes ogs\u00e5 metoden Clear. Clear-metoden sletter den del af siden, der er skrevet, men endnu ikke sendt til brugeren. Clear-metoden er beskrevet tidligere i dette kapitel.<\/p>\n<p>F\u00e6lles for Flush, End og Clear er, at de kun kan bruges, hvis buffering er sl\u00e5et til. Man sl\u00e5r buffering til ved at skrive Response.Buffer = true. Vil man sl\u00e5 buffering fra, skriver man Response.Buffer = false.<\/p>\n<p>Nedenst\u00e5ende eksempel viser, hvordan buffering kan benyttes.<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;% @Language=JavaScript %&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;%<\/p>\n<p>Response.buffer=true;<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;HTML&gt;<\/p>\n<p>&lt;body&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Se, hvor hurtigt jeg kan t\u00e6lle til en million:&lt;br&gt;<\/p>\n<p>&lt;%<\/p>\n<p>for (i = 0; i &lt;= 1000000; i++) {<\/p>\n<p>if(i % 10000 == 0) {<\/p>\n<p>Response.write(i);<\/p>\n<p>Response.write(&#8220;&lt;BR&gt;&#8221;);<\/p>\n<p>}<\/p>\n<p>if (i % 100000 == 0) {<\/p>\n<p>Response.flush();<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>%&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;\/body&gt;<\/p>\n<p>&lt;\/HTML&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>Eksemplet t\u00e6ller fra nul til en million og udskriver hele titusinder. Hver gang, der er talt hundredtusind op, sendes udskriften til browseren, hvilket vil sige, at brugeren vil f\u00e5 pr\u00e6senteret ti tal ad gangen.<\/p>\n<p>Fjernede man linierne Response.buffer=true og Response.flush(), ville brugeren se tallene et efter et.<\/p>\n<p>&nbsp;<\/p>\n<h1>Sammenfatning<\/h1>\n<p>I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder\u00a0 og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.<\/p>\n<p>&nbsp;<\/p>\n<p>De problemer, der ikke kan l\u00f8ses med scriptsprogene, kan typisk l\u00f8ses ved hj\u00e6lp af ActiveX-komponenter, og i dette kapitel er det ogs\u00e5 blevet gennemg\u00e5et, hvordan man kan bruge en r\u00e6kke af de komponenter, der f\u00f8lger med Internet Information Server.<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<p><b>Du l\u00e6ser en gammel bog<\/b><\/p>\n<p>Den bog, du l\u00e6ser her, er fra 1999, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om den aktuelle version af ASP.NET, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0735643385)\" onclick=\"javascript:pageTracker._trackPageview('\/outbound\/article\/http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0735643385)');\"  target=\"_blank\">Programming ASP.NET 4.0<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>I dette kapitel vil der blive beskrevet nogle grundl\u00e6ggende programmeringsteknikker som brug af variable og metoder. Derefter vil der blive taget fat p\u00e5 ASP-programmeringen, hvor det vil blive gennemg\u00e5et, hvordan man laver en HTML-side fra ASP, hvordan man overf\u00f8rer data fra en formular til en ASP-side, og hvordan man bruger nogle af de avancerede komponenter, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":452,"menu_order":30,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-484","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"keywords\" content=\"asp,html,programmering,javascript,tags\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Biblioteket | Samling af artikler og b\u00f8ger\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Programmering med ASP | Biblioteket\" \/>\n\t\t<meta property=\"og:description\" content=\"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2011-11-09T06:15:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2011-11-09T06:32:50+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Programmering med ASP | Biblioteket\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"position\":2,\"name\":\"B\\u00f8ger\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/#listItem\",\"name\":\"Active Server Pages\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/#listItem\",\"position\":3,\"name\":\"Active Server Pages\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/#listItem\",\"name\":\"Kapitel 3 Programmering med ASP\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/#listItem\",\"position\":4,\"name\":\"Kapitel 3 Programmering med ASP\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/#listItem\",\"name\":\"Active Server Pages\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/#webpage\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/\",\"name\":\"Programmering med ASP | Biblioteket\",\"description\":\"I dette kapitel er de grundl\\u00e6ggende elementer i ASP-programmering blevet gennemg\\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.\",\"inLanguage\":\"da-DK\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/active-server-pages\\\/kapitel-3-programmering-med-asp\\\/#breadcrumblist\"},\"datePublished\":\"2011-11-09T08:15:43+02:00\",\"dateModified\":\"2011-11-09T08:32:50+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"inLanguage\":\"da-DK\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Programmering med ASP | Biblioteket","description":"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.","canonical_url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/","robots":"max-image-preview:large","keywords":"asp,html,programmering,javascript,tags","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","position":1,"name":"Home","item":"https:\/\/www.kristiansborg.dk\/bibliotek","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","position":2,"name":"B\u00f8ger","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/#listItem","name":"Active Server Pages"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/#listItem","position":3,"name":"Active Server Pages","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/#listItem","name":"Kapitel 3 Programmering med ASP"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/#listItem","position":4,"name":"Kapitel 3 Programmering med ASP","previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/#listItem","name":"Active Server Pages"}}]},{"@type":"Organization","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/"},{"@type":"WebPage","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/#webpage","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/","name":"Programmering med ASP | Biblioteket","description":"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.","inLanguage":"da-DK","isPartOf":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website"},"breadcrumb":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/#breadcrumblist"},"datePublished":"2011-11-09T08:15:43+02:00","dateModified":"2011-11-09T08:32:50+02:00"},{"@type":"WebSite","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","inLanguage":"da-DK","publisher":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization"}}]},"og:locale":"da_DK","og:site_name":"Biblioteket | Samling af artikler og b\u00f8ger","og:type":"article","og:title":"Programmering med ASP | Biblioteket","og:description":"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.","og:url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/","article:published_time":"2011-11-09T06:15:43+00:00","article:modified_time":"2011-11-09T06:32:50+00:00","twitter:card":"summary","twitter:title":"Programmering med ASP | Biblioteket","twitter:description":"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program."},"aioseo_meta_data":{"post_id":"484","title":"Programmering med ASP | #site_title","description":"I dette kapitel er de grundl\u00e6ggende elementer i ASP-programmering blevet gennemg\u00e5et. Det er blevet forklaret, hvordan man kan anvende scriptsprogets metoder  og variabler, og hvordan man kan generere HTML-kode, der kan vises i klientens browser. Kapitlet har ogs\u00e5 behandlet, hvordan man indsender data fra en HTML-side til et ASP-program.","keywords":[{"label":"ASP","value":"ASP"},{"label":"HTML","value":"HTML"},{"label":"programmering","value":"programmering"},{"label":"Javascript","value":"Javascript"},{"label":"tags","value":"tags"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 06:59:15","updated":"2025-06-04 02:18:23","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/\" title=\"B\u00f8ger\">B\u00f8ger<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/\" title=\"Active Server Pages\">Active Server Pages<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tKapitel 3 Programmering med ASP\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.kristiansborg.dk\/bibliotek"},{"label":"B\u00f8ger","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/"},{"label":"Active Server Pages","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/"},{"label":"Kapitel 3 Programmering med ASP","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/active-server-pages\/kapitel-3-programmering-med-asp\/"}],"_links":{"self":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/484","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/comments?post=484"}],"version-history":[{"count":4,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/484\/revisions"}],"predecessor-version":[{"id":505,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/484\/revisions\/505"}],"up":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/452"}],"wp:attachment":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/media?parent=484"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}