-1
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 MatrixDet 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:
<form id="evt_id_på_formular" runat="server">
<!-- Her placeres kontroller -->
</form>
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:
// C#
void Page_Load(object sender, EventArgs e) {
}
' VB
Sub Page_Load(sender As Object, e As EventArgs)
End Sub
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 PostbackDenne 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#<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e) {
if (!Page.IsPostBack){
TextBox1.Text = System.DateTime.Now.ToString("F");
}
}
</script>
<html>
<body>
<form runat="server">
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" runat="server" Text="Button"/>
</form>
</body>
</html>
VB.NET
<%@ Page Language="VB" %>
<script runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
if not Page.IsPostback then
textbox1.text = datetime.now.tostring("F")
end if
End Sub
</script>
<html>
<body>
<form runat="server">
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" runat="server" Text="Button"/>
</form>
</body>
</html>
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)
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...
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.
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....
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.