Kurs: Core Web Application Technologies
Modul: Osnove veb programiranja
Autor: Marko Stojićević
Naziv jedinice: Događaji i Postback
Materijali vezani uz ovu lekciju:
-
Test događaji i postback -
Događaji i Postback (PDF dokument)
Tipovi fajlova u ASP.NET 2.0
Veb strane u ASP.NET-u imaju ekstenziju aspx. Pored toga, u Visual Web Developer-u moguće je kreirati distribuirane komponente kao što su veb servisi. Veb servisi imaju ekstenziju asmx. Pored kontrola definisanih u okruženju Visual Web Developer moguće je definisati i sopstvene kontrole. Takve kontrola nazivaju se korisničke kontrole i imaju ekstenziju ascx. Korisnička kontrola se može dodavati na više veb strana. HTTP handler je proces koji e izvršava kao odgovor na zahtev koji upućuje ASP.NET veb aplikacija. Najopštiji je hendler koji obrađuje aspx fajlove. Moguće je definisati i sopstvene HTTP Hendler-e i takvi fajlovi imaju ekstenziju ashx. Global.asax fajl je globalni fajl veb aplikacije i koristi se za definisanje događaja vezanih za start i završetak rada aplikacije, za start i kraj korisničke sesije itd.
Code separation model
ASP.NET 1.1 podržava tzv. Code-behind model gde se serverski kod i HTML deo veb strane nalaze u odvojenim fajlovima. Nije moguće pokrenuti aspx stranu, a da se ne pokrene ceo projekat. Kod Code separation modela koji je prisutan u verziji 2005 podrazumevano je da su kod i HTML u istom fajlu. Moguće je kod pisati u posebnom fajlu. Nije potrebno kompajliranje i rekompajliranje projekta, strana se kompajlira kada joj se prvi put pristupi. Moguće je pokrenuti pojedinačnu aspx stranu.
Kod i HTML u istom fajlu
Serverski kod i HTML se nalaze u istom fajlu. Serverski kod se nalazi u skript sekciji, a HTML kod u odgovarajućoj HTML sekciji. Page direktiva sadrži jedan atribut koji definiše jezik u kome se piše serverski kod.
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Kod i HTML u odvojenim fajlovima
HTML kod se nalazi u fajlu Default3.aspx, a kod koji je pridružen stranici nalazi se u fajlu Default3.aspx.cs. Fajl u kome se nalazi kod pridružen HTML delu, specificira se unutar Page direktive korišćenjem atributa CodeFile.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Fajl Default.aspx.cs sadrži serverski kod pridružen aspx strani. Odgovarajuće .NET fremework biblioteke klasa se uključuju u projekat korišćenjem Using direktive.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Partial class
Ova karakteristika omogućava klasi da se protegne na više fajlova. Kompajler spaja delove u jednu klasu. HTML je jedan deo klase, a kod je drugi deo klase. Kompajler koristi CodeFile atribut u @Page direktivi da bi pronašao kod.
Deljenje izvora (Source) koda
Da bi neki kod bio dostupan iz ma koje strane veb aplikacije, potrebno je smestiti ga u App_Code folder. Kreira se desnim klikom na ikonicu veb sajta u Solution Explorer-u, a zatim se odabere opcija Add ASP.NET Folder i iz ponuđenog menija odabere App_Code folder. ASP.NET kontroliše ovaj folder i kompajlira bilo koju klasu koja se tu doda ili edituje. Veb strane i fajlove koje ne sadrže izvorišni kod, ne treba dodavati u ovaj folder.
Objektni model strane
Page clasa je osnova za sve veb forme koje se dinamički kreiraju iz odgovarajućih .aspx resursa. U aspx fajlu se nalazi @Page direktiva kojom se definišu atributi specifični za stranu i koji se koriste od strane parsera ili kompajlera. Može postojati samo jedna @Page direktiva po strani.
<%@ Page attribute="value" [attribute="value"...] %>
Svakom od atributa u Page direktivi potrebno je dodeliti vrednost. Vrednost atributa stavlja se između znakova navoda.
Atributi @Page direktive
Atribut Language specificira programski jezik koji se koristi na strani. Atribut AutoEventWireup specificira da li su događaji strane povezani – podrazumevana opcija je true. Atribut CodeFile specificira fajl u kome se nalazi kod pridružen strani i koristi se zajedno sa atributom Inherits. Atribut Inherits definiše klasu koju treba naslediti. Atribut MasterPageFile specificira master stranu za tekuću stranu. Atribut Theme specificira temu tj. šablon koji će se koristiti na strani.
Svojstva i metode klase Page
Svojstvo IsPostBack ukazuje da li se strana učitava po prvi put ili se učitava kao odgovor na slanje te strane od strane klijenta do servera (Postback). Svojstvo PreviousPage daje stranu koja je prenela kontrolu na tekuću stranu. Ukoliko se tekućoj strani pristupa direktno, ovo svojstvo daje Null (ništa, nula) referencu. Svojstvo Title služi za čitanje ili postavljanje naslova strane. Svojstvo Response omogućava slanje HTTP odgovora klijentu. Metoda SetFocus() postavlja fokus na određenu kontrolu. Metoda FindControl() služi za pronalaženje kontrole po ID-u.
Životni ciklus strane
Životni ciklus strane počinje nakon toga što korisnik uputi zahtev za stranom. Page_PreInit se aktivira pre nego što počne proces inicijalizacije strane. Događaj Page_Init se najčešće koristi za čitanje ili inicijalizaciju svojstva kontrola. Nakon toga dolazi događaj Page_Load kada počinje učitavanje strane. Kada je strana učitana obrađuju se događaji koje generišu kontrole i to se prvo proverava IsValid svojstvo strane ukoliko ona sadrži kontrole za validaciju. Zatim se obrađuju drugi događaji koje generišu kontrole, na primer, klik na dugme i sl. Page_PreRender događaj vrši promene u sadržaju strane. Page_Unload događaj se generiše pri zatvaranju strane.
Procedura za ovaj događaj generiše se dvostrukim klikom na stranu u dizajn modu. Ukoliko se strana učitava po prvi put - što se proverava if (!Page.IsPostBack) naredbom postavlja se fokus na kontrolu čiji je ID TextIme, ispisuje se poruka Prvi pristup. Ukoliko se strana učitava kao odgovor servera na akciju korisnika (klik na dugme), ispisuje se poruka Nije prvi put, a fokus se postavlja na kontrolu textPrezime.
void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetFocus(“textIme");
Label1.Text = "Prvi pristup";
}
else
{
SetFocus(“textPrezime");
Label1.Text = "Nije prvi put";
}
}