Lage ASP.NET sider - Institutt for informatikk og e

Transcription

Lage ASP.NET sider - Institutt for informatikk og e
Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag
Lage ASP.NET sider
Grethe Sandstrak
08.09.2015
Lærestoffet er utviklet for faget LV199D Web-programmering med ASP.NET
2. Lage ASP.NET sider
Resymé: I denne leksjonen skal vi lage enkle ASP.NET sider.
Innhold
2.1.
INNLEDNING ......................................................................................................................................... 1
2.2.
LAGE ASP.NET SIDER .......................................................................................................................... 1
2.2.1. Web-skjema ..................................................................................................................................... 3
2.2.2. ASP.NET kode ................................................................................................................................. 4
2.2.3. Visning av gjestebok i nettleser ....................................................................................................... 6
2.2.4. Viewstate ......................................................................................................................................... 7
2.3.
VISUAL BASIC.NET OG C#.NET .......................................................................................................... 9
2.3.1. C#.NET ............................................................................................................................................ 9
2.3.2. Visual Basic.NET ............................................................................................................................ 9
2.3.3. En minikalkulator i ASP.NET.......................................................................................................... 9
2.1. Innledning
I denne leksjonen skal vi se nærmere på oppbyggingen av en ASP.NET side. Vi ser på de
enkelte delene en slik side består av og hvordan vi skiller mellom HTML-kode og ASP.NET
kode. Videre ser vi på hva de enkelte kodebitene betyr og hva som foregår i kulissene. Til sist
i leksjonen skal vi se litt på programmeringsspråkene C#.NET og Visual Basic .NET som er
de vi forholder oss til i dette kurset.
2.2. Lage ASP.NET sider
I første leksjon presenterte vi et par enkle eksempler på ASP.NET kode. Vi skal nå gå inn å se
litt nærmere på en ASP.NET side og hvilke deler denne består av. Under følger et eksempel
på en ASP.NET side for en temporær gjestebok – gjestebok.aspx.
Siden fungerer slik at en bruker kan legge inn flere innlegg som adskilles med en
horisontallinje (<hr>). Gjesteboken er ikke så veldig nyttig iom at den er temporær: dvs at den
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 2 av 14
virker kun i en og samme nettleser (har ingen evne til å kommunisere med andre
brukere/nettlesere) og innholdet forsvinner idet du stenger nettleseren.
Slik ser fila gjestebok.aspx ut:
VB-kode:
C#-kode:
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 3 av 14
Vi ser at det er mange likheter med en vanlig HTML-side som inneholder et skjema. La oss
først se på den aller første linjen i koden:
<%@ Page Language = "VB" %>
Dette er et Sidedirektiv som lar deg inkludere spesielle instruksjoner til ASP.NET om
hvordan denne siden skal behandles. I dette tilfellet spesifiserer vi hvilket
programmeringsspråk som vil bli benyttet som standard på denne siden. Vi kan her velge bla
mellom C# og VB.NET.
2.2.1. Web-skjema
Vi kjenner igjen elementene fra HTML-skjema, <form>-tag og opprettelse av kontroller – en
tekstboks, en knapp og et ledetekstfelt.
Legg merke til at vi i form-taggen ikke har spesifisert noen metode eller handling slik vi gjør i
for eksempel ASP-sider, for å fortelle skjemaet hvor den skal sende/behandle inndataene.
<form runat = "server">
Når dette ikke er spesifisert kalles samme side på nytt – skjemaet sender info til seg selv
(postback). Dermed kan vi legge inn ASP.NET kode som behandle inndataene.
Et nytt element i form-taggen er runat = ”server”, denne setningen forteller ASP.NET
at du vil tjeneren skal holde oversikten over skjemaet, vi kaller dette for et Web-skjema. Om
setningen utelates vil skjemaet oppføre seg som et vanlig HTML-skjema.
Merk at du ikke kan skrive runat = ”client” – da vil du få en feilmelding ”Parser error
message: the runat attribute can only have the value ”server”. ” Vil du lage vanlig HTMLskjema utelater du altså bare runat-setningen.Vi skal komme tilbake til mer om web-skjema i
leksjon 4.
I Web-skjemaet (mellom <form> og </form>-taggene blir det opprettet fire web-kontroller:
En vanlig tekstboks, en tekstboks over flere linjer(multiline) – tilsvarer textarea i HTML, en
ledetekst og en trykknapp. Alle kontrollene er merket med attributtet runat = ”server”. En
vanlig nybegynnerfeil er å glemme denne runat-setningen, da vil disse bli sendt direkte tilbake
til klienten i stedet for å bli behandlet korrekt av tjeneren. I og med at nettlesere ignorerer alle
tagger de ikke kjenner, så vil de ikke bli vist til brukeren.
<asp:textbox id = "tbNavn" runat = "server"/>
<asp:textbox id = "tbKommentarer" TextMode = "multiline" rows=5 runat="server"/>
<asp:button id="btKnapp" Text="Legg til kommentar" OnClick="knappe_klikk"
runat ="server" />
<asp:label id = "lblInnlegg" runat = "server"/>
Vi ser likhetene til tilsvarende HTML-kontroller (<input name=”tbNavn” type
=”text” id = ”tbNavn”>). Hver enkelt web-kontroll har sin egen unike id, slik at vi
kan referere til den andre steder i ASP.NET siden. Legg merke til hvordan vi gir disse navn:
Alle textbokser har navn som starter med tb etterfulgt av et beskrivende navn for hva den
inneholder, for eksempel tbNavn. Knapper har navn som starter bt og ledetekster har navn
som starter med lbl. Merk at vi følger lærebokas notasjon, kanskje har du lært noe annet
tidligere?
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 4 av 14
Når det gjelder knappen som er opprettet så har den et ekstra attributt: ”OnClick =
"knappe_klikk". Dette ligner en del på klientside script for de som har kjennskap til det.
Knappen har en hendelse (event) ved navn OnClick som inntrer når knappen klikkes på.
Ved klikk på knappen vil ASP.NET kjøre prosedyren knappe_klikk. I motsetning til
klientside script så er det tjeneren som behandler disse hendelsene og avgjør hva som skal
gjøres.
En hendelse kan også være et tastetrykk eller et menyvalg.
Merk at ASP.NET er nøye på at tagger avsluttes: som for eksempel <form> </form>. Det
samme gjelder når du oppretter kontroller: <asp:textbox id = "tbNavn" runat = "server"/>
(lovlig kortform for : <asp:textbox id = "tbNavn" runat = "server"> … </asp:textbox>.
2.2.2. ASP.NET kode
Det er to måter å lage ASP.NET kode, enten i en kode-deklarasjons blokk eller i en kodeoversettelsesblokk (eng: code render block). På denne måten er det enkelt å se hva som er
ASP.NET kode og hva som HTML.
Kode-deklarasjons blokk
En deklarsjonsblokk er i motsetning til ren HTML-kode, ikke avgrenset til den aktuelle siden,
den inneholder også programkode som skal kjøres på tjeneren. Deklarasjonsblokka er
kompilert til maskinkode, kompilert kode blir utført raskere og mer stabilt enn om du skulle
bruke kode som tolkes under kjøring, som for eksempel kode-oversettelses- blokker (code
render, forklart lenger ned i teksten).
La oss se på en slik deklarasjonsblokk:
Du har vært vant til å bruke script-taggen til klientside scripting. Ved å legge til setningen
runat = ”server” inni script-taggen sier vi at det er tjeneren som skal kjøre scriptet.
<script runat = "server">………</script>
Dette er en deklarasjons blokk. Programkoden inni scriptet prosesseres dynamisk – koden
kompileres og kjøres av tjeneren.
Inni script-taggen finner vi metoden knappe_klikk. Hver gang denne metoden kalles vil
innholdet i ledetekstfeltet lblInnlegg oppdateres. Feltet oppdateres slik at først skrives
det en horisontal linje(<hr>), deretter kommer innholdet i tekstboksene tbNavn og
tbKommentar med en blank linje (<p>) mellom seg, til sist kommer eventuelle tidligere
innlegg (innholdet av lblInnlegg).
VB
sub knappe_klikk(obj as object, e as eventargs)
lblInnlegg.text = "<hr>”+tbNavn.Text+"<p>"+tbKommentarer.Text+lblInnlegg.text
end sub
C#
protected void knappe_klikk(object sender, EventArgs e)
{
lblInnlegg.Text = "<hr>"+ tbNavn.Text+"<p>"+ tbKommentar.Text+lblInnlegg.Text;
}
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 5 av 14
Kode- oversettelsesblokk
En oversettelsesblokk er som nevnt over, avgrenset til å gjelde bare på denne siden. Den
omsluttes av taggene: <% … %>. I gjestebok-eksemplet er følgende linje med:
VB
<% Response.Write("Grethe's Temporære gjestebok! ") %>
Denne setningen sier at vi har et objekt kalt Response, og vi bruker dette objektet sin metode
Write for å skrive ut tekst i nettleseren. Det er fullt mulig å legge inn HTML-tagger i teksten
vi ønsker å skrive ut, for eksempel slik:
C#
<% Response.Write("<b>Grethe's Temporære gjestebok! </b> "); %>
Slike oversettelsesblokker kan plasseres innimellom vanlig HTML-kode hvor det er
hensiktsmessig.
Response og andre objekter blir mer inngående forklart i leksjon 3.
Hva er best?
Vi har altså to ulike metoder å skrive ASP.NET kode på i en ASP.NET side – i en
deklarasjonsblokk eller i en oversettelsesblokk. Den første metoden er klart å foretrekke, fordi
den er raskere (kompilert kode) og eliminerer såkalt ”spagetti-programmering”, som kan
oppstå om vi dytter inn oversettelsesblokker ”overalt” i ASP.NET siden.
Det vi må tenke på ved utvikling av en ASP.NET side, er at det skal være lett å skille mellom
HTML-kode og ASP.NET kode. Det skal være enkelt å rette opp eventuelle feil og legge til
nye elementer. Dette kan oppnås ved å bruke deklarasjonsblokker i størst mulig grad.
Hva skjer i kulissene?
I forrige leksjon ble det vist en figur over hva som skjer på tjenersiden når den mottar en
forespørsel fra en klient. Vi gjør denne litt mer detaljert for å vise hva ASP.NET gjør med
forespørselen, se Figur 2-1.
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 6 av 14
Figur 2-1 Hva gjør ASP.NET med forespørsler
Første gang en klient sender forespørsel til tjeneren om å vise en side, vil ASP.NET
kompilere nødvendig kode (alle deklarasjonsblokker), når det er gjort går ASP.NET videre og
behandler eventuelle hendelser og kjører programkoden. Til sist oversettes resultatet av
kjøringa til HTML-kode (for eksempel <asp:Textbox> gjøres om til en HTML- inputboks),
som da returneres til klienten via web-tjeneren (IIS).
Du har sikkert merket at når du laster en side første gang, så oppstår det en liten forsinkelse,
men når du kommer tilbake for andre gang går det en del raskere. Dette er nettopp fordi at
koden kompileres kun ved første visning.
Selv om det oppstår en liten forsinkelse første gang siden vises, vil man få økt ytelse ved
senere forespørsler, så lenge koden for siden ikke er endret – da må den kompileres på nytt,
selv om endringene som er gjort er minimale.
2.2.3. Visning av gjestebok i nettleser
Figur 2-2 viser hvordan fila gjestebok.aspx presenteres i en nettleser første gang og etter å ha
lagt til to nye innlegg.
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 7 av 14
Figur 2-2 Eksempel på kjøring av gjestebok.aspx
2.2.4. Viewstate
I utgangspunktet er http en tilstandsløs protokoll, det betyr at hver forespørsel til tjeneren er
uavhengig av alle andre. Dette innebærer et problem for programmereren, for med en gang
klienten sender en ny forespørsel sendes informasjon til tjeneren for deretter å ”glemmes”.
Ofte er det beholv for å huske denne informasjonen og dette kan gjøres på flere måter:

Cookies

Sesjoner

Skjulte felt (hidden)
I ASP.NET finnes det et innebygd skjult felt som heter Viewstate. Dette feltet beskriver
hvordan et objekt ser ut i et bestemt øyeblikk. Hvis vi ser på gjestebok eksemplet og bildet til
høyre i Figur 2-2, så vil viewstate inneholde all informasjon som klienten har skrevet inn i de
ulike kontrollene: tekstboksen tbNavn inneholder teksten ”Svend”, knappen btKnapp
indikerer om den er trykket på eller ikke, osv.
Hvis du fyller ut et HTML-skjema og kommer tilbake til det senere, så er sjansen stor for at
de feltene du fylte ut er tomme, dette fordi at disse ikke har tillatelse til å overvåke viewstate
eller lignende informasjon.
ASP.NET holder automatisk oversikten over viewstate til alle elementer som inneholder
attributtet runat = ”server”. Det lages da et skjult felt (hidden) som inneholder de aktuelle
verdiene. Vi ser litt næremere på gjestebokfila vi har laget i denne leksjonen. Vi har åpnet den
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 8 av 14
i en nettleser og skrevet inn verdiene som vist til høyre i Figur 2-2. Deretter velger vi Vis
kilde (view source) i Internet Explorer for å se på koden slik den fremstår for klienten:
HTML
<html><title>Grethes temporære gjestebok</title>
<body>
Grethe's Temporære gjestebok!
<form name="_ctl0" method="post" action="gjestebok.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE"
value="dDwxOTE0NDY4ODE2O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDc+Oz47bDx0PHA8cDxsPFRleHQ7Pjts
PFw8aHJcPlN2ZW5kXDxwXD5KYSwgaWtrZSBzYW50Pw0KXDxoclw+R3JldGhlXDxwXD5EZXR0ZSB2YXIgamF
tbWVuIGfDuHkhDQo7Pj47Pjs7Pjs+Pjs+Pjs+Hx8AvT7pdRbKGgy1F7hzuDm+AiY=" />
<B>Brukernavn:</B>
<input name="tbNavn" type="text" value="Svend" id="tbNavn" />
<p>
<b>Kommentarer:</b>
<br>
<textarea name="tbKommentarer" rows="5" id="tbKommentarer">Ja, ikke sant?
</textarea>
<br>
<input type="submit" name="btKnapp" value="Legg til kommentar" id="btKnapp" />
<span id="lblInnlegg"><hr>Svend<p>Ja, ikke sant?
<hr>Grethe<p>Dette var jammen gøy!
</span>
</form>
</body></html>
Vi ser at dette ikke den samme koden som vi opprinnelig skrev inn. For det første er
deklarasjonsblokka er borte (<script>) – dette var som vi husker kode som kompileres og
kjøres på tjeneren. Videre legger vi merke til at <form> - blokka har endret seg en del. Der vi
skrev: <Form runat = ”server”> står det nå:
<form name="_ctl0" method="post" action="gjestebok.aspx" id="_ctl0">
Merk: dersom du setter id-attributtet til formen slik vi har vist i C#-koden, <Form
runat = ”server”>, så vil vi name og id vises som ”form1”.
id=”form1”
En annen forandring er at ASP.NET kontrollene er gjort om til HTML-kontroller, for
eksempel linjen: <asp:textbox id = "tbKommentarer" TextMode = "multiline" rows=5
runat = "server" />
Er nå blitt til:
<textarea name="tbKommentarer" rows="5" id="tbKommentarer">Ja,ikke sant?
</textarea>
Det som var en multiline tekstboks i ASP.NET koden, er nå et tekstområde + at innholdet i
tekstfeltet er blitt en del av siden (teksten: ”Ja, ikke sant?”). Hvordan er dette mulig?
Som nevnt over, inneholder det noe kryptiske, skjulte feltet viewstate alle aktuelle verdier for
en side. Dette feltet er en del av klientens forespørsel til tjeneren og blir oppdateret med
eventuelle nye verdier av tjeneren før det returneres som en del av responsen til klienten.
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 9 av 14
<input type="hidden" name="__VIEWSTATE"
value="dDwxOTE0NDY4ODE2O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDc+Oz47bDx0PHA8cDxsPFRleHQ7Pjts
PFw8aHJcPlN2ZW5kXDxwXD5KYSwgaWtrZSBzYW50Pw0KXDxoclw+R3JldGhlXDxwXD5EZXR0ZSB2YXIgamF
tbWVuIGfDuHkhDQo7Pj47Pjs7Pjs+Pjs+Pjs+Hx8AvT7pdRbKGgy1F7hzuDm+AiY=" />
Viewstate vil inneholde alle de inndata som er skrevet inn i de ulike feltene ved postback
forespørsel (altså ikke første gang siden lastes, og bare hvis siden kaller seg selv). Hvis du
forlater gjesteboken og besøker en annen side for eksempel http://www.vg.no, for så å gå
tilbake til gjesteboken, ved å trykke på Tilbake (Back)-knappen og deretter oppdater/refresh i
nettleseren, så vil de siste inndata du skrev huskes. Merk at hvis du derimot skriver inn
adressen til siden (url) på nytt, så blir det oppfattet som en ny sesjon og du får opp bare blanke
felter.
Denne funksjonaliteten ved ASP.NET er spesielt gunstig på web-sider hvor en bruker skal
fylle ut et registrerings skjema med flere obligatoriske felter. Hvis en bruker forsøker å sende
et skjema uten å ha fylt ut alle nødvendige felt, ønsker vi å skrive en feilmelding til
vedkommende for så å presentere skjema på nytt med de data brukeren allerede har skrevet
inn. Å la brukeren være nødt til å skrive inn alle data på nytt når feil oppstår, kan være en stor
kilde til frustrasjon for brukeren og det ønsker vi å unngå .
2.3. Visual Basic.NET og C#.NET
I dette kurset er det mulig å bruke enten C# eller VB som programmeringsspråk. Under lesing
i læreboka vær obs på at programeksemplene er laget i både i VB.NET og C#.
2.3.1. C#.NET
C# (uttales C- sharp) er et programmeringsspråk i C-familien. C# har sin bakgrunn i C og
C++ og prøver å kombinere det beste fra C, C++, Java og også MS Visual Basic.
Programmeringsspråket er designet spesielt for .NET plattformen av Microsoft. Dette for å
gjøre det enklere for programmerere å ta i bruk denne plattformen. For de som har
programmert i C++ eller Java før, vil man se likhetene mellom de ulike
programmeringsspråkene og kunne dra veksler på tidligere erfaringer når man setter seg inn
C#. C# er et hendelsesstyrt, objektorientert og visuelt programmeringsspråk.
2.3.2. Visual Basic.NET
VB.NET er et programmeringsspråk som har vært i bruk i mange år. Første versjon av Visual
Basic kom 1991 og er etterfølgeren til Basic. Basic står for Beginners All-purpose Symbolic
Instruction Code. Bakgrunnen for å lage språket var å gjøre det lettere for nybegynnere å
programmere. VB.NET er siste utvidelse av språket og støttes fult ut av .NET rammeverk og
CLR. Forholdsvis mange ASP.NET utviklere benytter seg av dette språket og det er enkelt å
lære.
”Frisk” gjerne opp kunnskapen om VB.NET (variabler, datatyper, tabeller, operatorer,
kontrollstrukturer, funksjoner, klasser, arv) og ta deretter en titt på de to neste eksemplene i
leksjonen – et lite og enkelt eksempel og et litt større for å dekke litt flere temaer.
2.3.3. En minikalkulator i ASP.NET
La oss se på et lite programeksempel – fila Minikalkis.aspx. Vi ser at denne siden består kun
av en deklarasjonsblokk (script) med VB.NET kode. Hver gang siden lastes kjøres
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 10 av 14
programkoden. Det opprettes tre globale variabler, en tekststreng og to tall og inni metoden
page_load skrives regnestykke med svar ut i nettleseren:
VB
<%@ Page Language = "VB" %>
<script runat = "server">
Dim Tekst as String = "<b>Velkommen til Grethes minikalkis :)</b><br /><br />"
Dim A as integer = 2
Dim B as integer = 3
sub page_load(obj as object, e as eventargs)
Response.Write(Tekst)
Response.Write("Et lite regnestykke: ")
Response.Write(A & " * " & B & " = " & A*B)
end sub
</script>
<html><head><title>Minikalkis</title></head>
<body></body></html>
C#
<%@ Page Language = "C#" %>
<script runat = "server">
String tekst = "<b>Velkommen til Grethes minikalkis :)</b><br /><br />";
int a = 2;
int b = 3;
Protected Page_Load(object sender, EventArgs e)
{
Response.Write(Tekst);
Response.Write("Et lite regnestykke: ");
Response.Write(a + " * " + b + " = " + a*b);
}
</script>
<html><head><title>Minikalkis</title></head>
<body></body></html>
En klient som sender en forespørsel etter denne siden, vil motta følgende HTML-kode. Merk
spesielt hvor Response.Write setningene havner hen i HTML-fila.:
<b>Velkommen til Grethes minikalkis :)</b><br /><br />Et lite regnestykke: 2 * 3 = 6
<html><head><title>Minikalkis</title></head>
<body></body></html>
Dette resulterer i følgende visning i nettleser:
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 11 av 14
Figur 2-3 Minikalkis enkel utgave
Når det gjelder navnekonvensjon for variabler, så er en ofte brukt notasjon i VB.NET å bruke
et prefiks som indikerer datatypen til den bestemte variabelen (læreboka følger denne
standarden): For eksempel i eksemplet over så ville det stå:
Dim strTekst as String = “<b>Hei</b>”
Dim intA as Integer = 2
Det er også viktig å gi variablene beskrivende navn slik at det er lett å huske hva de skal
brukes til.
Et siste punkt vi skal minne om er at det er ikke uten videre lov å blande tall og tekst i for
eksempel et regnestykke. VB hjelper oss litt på vei her, men i C# må vi parse om teksten til
tall.
Vi utvider minikalkisen til å la klienten lese inn to tall fra tastaturet:
Figur 2-4 Minikalkis med innlesing fra klient
Ny utgave av fila minikalkis.aspx følger under. Legg merke følgende endringer:

Metoden i Script-blokka har endret navn til Beregn_Knapp (kjøres dermed ikke
hvergang siden lastes. Kun når knappen er trykket på.)

Det er lagt til HTML-kode.
VB
<%@ Page Language = "VB" %>
<script runat = "server">
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 12 av 14
Dim A as integer
Dim B as integer
sub Beregn_Knapp(obj as object, e as eventargs)
A = tbTall1.Text ‘ her foregår automatisk parsing av tekst til tall
B = tbTall2.Text
Response.Write("<p>Et lite regnestykke: ")
Response.Write(A & " * " & B & " = " & A*B)
end sub
</script>
<html><title>Minikalkis</title>
<body>
<p><b>Velkommen til Grethes minikalkis :)</b><br />
<form runat = "server">
Skriv inn tall 1:
<asp:textbox id="tbTall1" runat = "server"/>
<br />
Skriv inn tall 2:
<asp:textbox id="tbTall2" runat = "server"/>
<asp:button id="btBeregn" Text = "Utfør beregning"
OnClick= "Beregn_Knapp" runat = "server" />
</form>
</body></html>
C#
<%@ Page Language = "C#" %>
<script runat="server">
private int a;
private int b;
protected void Beregn_Knapp(object sender, EventArgs e)
{
a = int.Parse(tbTall1.Text);
b = int.Parse(tbTall2.Text);
Response.Write("<p>Et lite regnestykke: ");
Response.Write(a + " * " + b + " = " + a * b + "<br />");
}
</script>
<html>
<head><title>Minikalkis</title></head>
<body>
<b>Velkommen til Grethes minikalkis :)</b>
<form id="Form1" runat = "server">
Skriv inn tall 1:
<asp:textbox id="tbTall1" runat = "server"/> <br /><br />
Skriv inn tall 2:
<asp:textbox id="tbTall2" runat = "server"/><br /><br />
<asp:button id="btBeregn" Text = "Utfør beregning" OnClick= "Beregn_Knapp"
runat = "server" />
</form></body></html>
La oss til sist lage et litt større eksempel med en mer ”intelligent” kalkulator som kan regne
med flere regnearter. Bruker får skrive inn to tall og regneart (+,-,* eller /). Ved å trykke på en
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 13 av 14
knapp beregnes ønsket regnestykke. I Script-blokka foregår all beregning i en prosedyre. For
å utføre selve beregningen er det laget en funksjon/Metode Beregn som tar seg av dette. Merk
at det ikke er tatt særlige hensyn i forhold til at bruker taster inn feil inndata. Det kastes et
unntak ved inntasting av feil regneart – dette unntaket fanges imidlertid ikke opp. Inntasting
av ugyldige tall behandles ikke. Mer om unntakshåndtering senere i kurset.
VB
<%@ Page Language = "VB" %>
<script runat = "server">
Dim A as integer
Dim B as integer
Dim Regneart as String
Dim Sum as Double
sub Beregn_Knapp(obj as object, e as eventargs)
A = tbTall1.Text
B = tbTall2.Text
Regneart = tbRegneart.Text
Sum = Beregn(A,B,Regneart)
Response.Write("<p>Et lite regnestykke: ")
Response.Write(A & " " & Regneart & " " & B & " = " & Sum)
end sub
function Beregn(A as integer, B as integer, Regneart as String) as Double
Select Case Regneart
Case "+"
Return A+B
Case "-"
Return A-B
Case "*"
Return A*B
Case "/"
Return A/B
Case Else
Throw New ArithmeticException("Ugyldig regneart")
End Select
end function
</script>
C#
<%@ Page Language="C#" %>
<script runat="server">
private int a;
private int b;
private char regneart;
private double sum;
protected void Beregn_Knapp(object sender, EventArgs e)
{
a = int.Parse(tbTall1.Text);
b = int.Parse(tbTall2.Text);
regneart = char.Parse(tbRegneart.Text);
Response.Write("<p>Et lite regnestykke: ");
sum = beregn(a, b, regneart);
Opphavsrett: Forfatter og Stiftelsen TISIP
Lage ASP.NET sider
side 14 av 14
Response.Write(a + " " + regneart + " " + b + " = " + sum + "<br />");
}
protected double beregn(int a, int b, char regneart)
{
switch(regneart)
{
case '+':
return a+b;
case '-':
return a-b;
case '*' :
return a*b;
case '/' :
return a/b;
default :
throw new ArgumentException("Ugyldig regneart");
}
}
</script>
HTML
<html>
<head><title>Minikalkis</title></head>
<body>
<b>Velkommen til Grethes minikalkis :)</b>
<form id="Form1" runat = "server">
Skriv inn tall 1:
<asp:textbox id="tbTall1" runat = "server"/> <br /><br />
Skriv inn tall 2:
<asp:textbox id="tbTall2" runat = "server"/><br />
Skriv inn regneart (+, -, * eller /):
<asp:textbox id="tbRegneart" runat = "server"/><br />
<asp:button id="btBeregn" Text = "Utfør beregning"
OnClick= "Beregn_Knapp" runat = "server" />
</form></body></html>
To eksempler på visning av siden i en nettleser:
Opphavsrett: Forfatter og Stiftelsen TISIP