ASP.NET Tutorial, Part 4 - Formularer og kontroller

Tags:    asp.net
Skrevet af Bruger #7741 @ 12.06.2005
I modsætning til tidligere versioner af ASP, og andre serverside-teknologier, er ASP.NET bygget op omkring brugen af kontroller (objekter som knapper, lister, tekstbokse med videre) og formularer (objekt som kan indeholde en eller flere kontroller). Det skyldes, at det gør udviklingen nemmere end traditionel web-udvikling, og det er da også et af målene fra Microsofts side. Det skal være så nemt som muligt at udvikle ASP.NET-applikationer således at man kan bruge tiden på at udvikle kernekode (selve funktionaliteten) og ikke bruge for meget tid på brugerfladeprogrammering.

Formularen


Al brugerfladeprogrammering i ASP.NET er bygget op omkring brugen af formularer. Når man eksempelvis starter et tomt projekt i Web Matrix (se figur 1), vil man stå med en tom formular til at placere kontroller på.


Figur 1 En tom formular i Web Matrix

Det samme gør sig gældende i Visual Studio .NET.

Selve opmærkningen til en ASP.NET-formular (klik eksempelvis på HTML-fanen i Web Matrix) ser således ud:
Fold kodeboks ind/udKode 

Bemærk egenskaben runat="server" som fortæller web serveren at de på formularen placerede kontroller skal behandles på serverplan.

Den objektorienterede side


Selve siden, formularen og kontrollerne i ASP.NET er i realiteten objekter ligesom alt andet i .NET, og som de fleste objekter har de også en del forskellige hændelser. En af de vigtigste hændelser sker når siden dannes på serveren inden den sendes til klienten. Hændelsen hedder Load, og kan blandt andet fanges i en metode kaldet Page_Load(…).
Syntaksen til metoden er som følger:
Fold kodeboks ind/udKode 


Fold kodeboks ind/udKode 

I denne metode kan skrives kode som skal afvikles inden siden sendes til klienten - eksempelvis kode som initialiserer kontroller med data fra en database.

Nogle gange har man også brug for en side uden nogen brugerflade overhovedet, som eksempelvis kun har til formål at afvikle en blok kode og herefter sende klienten videre til en anden side. I sådanne tilfælde vil man normalt også placere koden i Page_Load-metoden.

Postback


Muligheden for at håndtere kontroller på serverplan er et af de store features i ASP.NET, og for at det kan lade sig gøre, skal siden forbi serveren, som dermed har mulighed for at afvikle kode og efterfølgende sende siden retur til klienten. Denne trafik fra klient til server og retur kaldes logisk nok en postback.


Figur 2 Postback

Denne postback kan enten gennemtvinges gennem kode, eller via kontroller hvilket klart er det nemmeste. Flere kontroller har indbygget en postback-funktionalitet, herunder en knap der som standard gennemtvinger en postback når der klikkes på den. Men også andre kontroller kan skabe en postback, som eksempelvis en liste, som kan gennemtvinge en postback når der vælges et element på listen.

I både lektion 1 og lektion 2 ses eksempler på dette, idet der sker en postback når der klikkes på en knap, og det gennemtvinger afviklingen af en metode på serveren, som efterfølgende tilbagesender siden til klienten.

Hvis man har erfaring med enten ASP3 eller PHP, er postback en ny måde at tænke på. I de nævnte teknologier var det normalt at have en side til at indsamle data på en formular, og en anden side til at behandle det indtastede. I ASP.NET er det altså erstattet af en enkelt side som både indsamler og behandler data.

Eksempel


Lad os se på endnu et simpelt eksempel som benytter Page_Load-hændelsen og IsPostBack-egenskaben - se figur 3.

C#
Fold kodeboks ind/udKode 

VB.NET


Fold kodeboks ind/udKode 
Figur 3 Eksempel på Page_Load og IsPostBack.

Opmærkningerne danner en side med to kontroller - en tekstboks (Textbox1) og en knap (Button1).

Koden indeholder en metode til håndtering af Page_Load-hændelsen, og i denne metode checkes ved hjælp af IsPostBack om det er første gang siden hentes, og hvis det er tilfældet, tildeles Textbox1 systemdato og tid.

Når der klikkes på knappen, sker der automatisk en postback, hvilket resulterer i afvikling af Page_Load-metoden igen. Men fordi koden, der tildeler tekstboksen en ny dato og tid, kun afvikles hvis det ikke er en postback, vil tekstboksen have samme værdi ligegyldigt hvor mange gange der klikkes på knappen.

Prøv selv


Du kan eventuelt selv prøve at starte Web Matrix og trække en tekstboks og en knap ind på formularen. For at skrive koden til knappen kan du blot dobbeltklikke på den. Koden bag Page_Load(…) kan du skrive ved at vælge Page i Properties-vinduet, klikke på det lille lyn (normalt ikon for hændelser), og under Load skrive "Page_Load" og klikke på Enter. Nu vil metodekroppen automatisk blive dannet, og du kan blot fylde kode ind.

Prøv eventuelt at fjerne If-strukturen rundt om tildelingen af dato og tid til tekstboksen. Nu vil tekstboksen blive tildelt en ny værdi hver gang der klikkes på knappen.


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (4)

User
Bruger #2730 @ 13.06.05 08:06
Hvorfor vælger du at skrive at man skal dobbeltklikke på en knap således man ryger i codebehind filen og så vise et eksempel i inline coding... savner også en gennemgang af forskellen på codebehind og inline, nu du har valgt bare at blande det hele sammen...
User
Bruger #3491 @ 13.06.05 22:09
Brian
Så vidt jeg husker, så ryger man ikke ind i en codebehind fil når man fx dobbeltklikker på en knap.

Den har vidst bare filen opdelt så når du er ved fanebladet HTML kan du kun se HTML delen
Når du klikker Code kan du kun se det Inline kode der er i filen.
Når du så klikker All kan du se begge dele.
Men jeg er ikke helt sikker da det er lang tid siden at jeg har benyttet WebMatrix.
User
Bruger #2730 @ 14.06.05 07:45
Jeg kender ikke WebMatrix, jeg bruger kun Visual Studio og der ryger man helt bestemt ind i codebehind filen.... og eftersom der står i starten af denne tutorial at det samme er gældende for Visual Studio så er det en uhensigtsmæssighed, og det er forvirrende at det hele er blandet sammen i een stor pærevælling (codebehind og inline) og hvis ikke WebMatrix og Visual Studio opfører sig på samme måde, så burde der have været taget højde for det....
User
Bruger #1925 @ 21.06.05 22:25
jeg har læst alle artiklerne op til 5 og giver højeste karakter. jeg synes stoffet er godt forklaret og eksemplerne er gode.
Du skal være logget ind for at skrive en kommentar.
t