Sunteți pe pagina 1din 19

Active Server Page - ASP.

NET
Concepte de baz
Dinamicitatea paginilor web
paginile statice se mai numesc i pagini HTML, cci nu conin alt tip de cod dect cel scris n
HTML; coninutul unei pagini nu variaz n timp sau de la un utilizator la altul; toi vd la
fel, fr informaii specifice contextului rulrii; coninutul este fixat i cunoscut nainte de
lansarea cererii ctre pagina respectiv.
- securitate redus, cci codul este vizibil din browser, cu View / Source.
Pentru a reflecta chestiuni legate de un context ( de exemplu afiarea orei exacte, sau pentru
adaptarea coninutului paginii la profilul utilizatorului care solicit pagina html ) pagina ar trebui
compus abia dup ce s-a naintat cererea din partea unui client.

paginile dinamice sunt cele configurate abia la momentul execuiei, n funcie de context i de
resursele disponibile pe calculatorul de pe care se lanseaz cererea; de obicei aceste pagini au i
un nivel nalt de interactivitate. Pentru a realiza dinamicitatea, trebuie scris cod surs care se
ruleaz la momentul lansrii unei cereri i care prin rulare stabilete coninutul ce va fi afiat
n pagin; trebuie avut ns n vedere n ce limbaj este scris acest cod, cine nelege i poate
prelucra acest cod.

Dinamicitate client-side: codul surs HTML este mixat cu instruciuni de compunere a


paginii (ntr-un limbaj script, uzual JavaScript sau VBScript); pagina e creat dinamic de ctre
browser, la momentul solicitrii ei; gradul de dinamicitate depinde de capacitile browser-ului
(Internet Explorer, Netscape Navigator, Opera, Firefox); script-ul este vizibil n browser
(View / Source) ceea ce nu e tocmai bine. Se poate folosi acest tip de dinamicitate eventual n
Intranet, unde tim ce se afl instalat pe maini i cunoatem gradul de securitate ce trebuie asigurat.
Dinamicitate server-side: codul surs HTML este mixat cu instruciuni de compunere a
paginii, scrise n diverse limbaje de programare i interpretate de un soft din sever-ul unde se
afl pagina solicitat. Pagina este compus tot dinamic, dar n server, la momentul solicitrii ei de
la distan, de ctre un client. Pagina circul tot ca stream HTML; mai precis, n modul de prelucrare
server, ctre client n reea circul doar rezultatul prelucrrii paginii, nu i instruciunile de
prelucrare. De asemenea, o parte din codul de prelucrare a paginii poate fi precompilat, iar la
momentul solicitrii paginii el este doar rulat, ceea ce poate mri considerabil performana accesului.
Este mult mai puternic, pe server putndu-se instala n singuran, toate tipurile de software de
creaie pagini web.
Tipologia dinamicitii, Client sau Server, se deduce n funcie de cine proceseaz cererea: un modul
specializat din browser sau un software din server.

Web server este un software care:


gestioneaz spaiul pentru site-uri i paginile Web ale acestora;
ascult pe un port (uzual 80), intercepteaz cererile i asigur regsirea i disponibilitatea
paginilor de pe un site aflat n gestiunea sa.
recunoate HTTP
Tehnologia CGI Common Gateway Interface
Avantaje:
acces la resursele sistemului de operare;
vitez bun de execuie, dac aplicaia CGI este deja compilat

15.10.2015

Dezavantaje:
depanare dificil;
se execut n proces separat, consumnd multe resurse.
Tehnologia ASP.NET
Modelul disponibilizat sub .NET de ctre Microsoft pentru aplicaiile accesibile din Internet este
denumit pe scurt ASP.NET (Active Server Page) i are urmtoarele caracteristici principale:
- se bazeaz pe formulare Web ( Web Forms) i separ logica prezentrii de logica de
business;
- furnizeaz controale de server ce recunosc evenimente la nivel de server, dar sunt n final
convertite n controale HTML, pentru a fi recunoscute i tratate n orice browser;
- asigur accesul la date prin mecanismul ADO.NET;
- permite caching pentru date i pentru salvarea strii unui client, pe server, pe calculatorul
client sau pe servere SQL specializate.
Avantaje ASP
-

este o tehnologie orientat obiect pentru dezvoltare rapid de aplicaii; elementele HTTP sunt
tratate tot obiectual;
lucreaz cu pagini compilate, nu interpretate pas cu pas; recompilarea se face doar cnd
este nevoie;
permite accesul la toate clasele din .NET, clase care pot ndeplini sarcini complexe;
asigur securitatea prin mecanisme forms-based i Passport authentication;
trateaz fiiere XML, inclusiv pentru reconfigurri, fr a necesita restartarea server-ului;
ofer extensibilitate prin crearea i integrarea de noi componente sau nlocuirea unora
existente cu versiuni noi.
Instalarea componentelor web-server i stabilirea legturii cu ASP.NET

Directorul fizic c:\inetpub\wwwroot;


Director virtual Virtual Directory, este o legtur ctre un alt director aflat fizic n afara arborelui
site-ului Web.
-

ne introduce n fereastra IIS coninnd lista site-urilor din evidena serverului Web ( Default
Web Site, plus altele ). Trebuie ca IIS s fie ns instalat.

15.10.2015

Dac nu e startat IIS l putem starta / restarta de aici: selectat Default Web Site / Stop / Start /
Restart IIS; nu necesit restartarea calculatorului.
O
alt
modalitate
de
a
ajunge
n
fereastra
de
startare
IIS:
C:\Windows\System32\inetsrv\InetMgr.exe; se pot stabili drepturi i interdicii pe diverse
servicii ale IIS.
Adugare director virtual:
Default Web Site / buton dreapta mouse / New Virtual Directory; aplicaiile create cu
Visual Studio beneficiaz de propriul director virtual, creat odat cu aplicaia; cele create cu
Visual Studio pot rula i n afara IIS, sub un server web de dezvoltare (integrat); ele vor fi
aduse la finalizare (deployment) ntr-un director virtual, fiind nregistrate n metabaza IIS,
pentru ca site-ul s fie vizibil i din afara aplicaiei.

Control Panel / Administrative Tools / Computer Management / Services & Apps / IIS / Web Sites /
Default Web Site cu click mouse dreapta / Properties se poate schimba portul prin care se comunic
cu serverul: TCP Port = 80 sau 81.
Dac pe calculator se dispune de mai multe plci de reea pot exista mai multe Local Area
Connection (Start / Control Panel / Network and DialUp Connection); ele pot avea setri
diferite. Se pot pune mai multe adrese IP chiar pe aceeai conexiune. O adres IP poate
avea i pseudonim:
- n registru DNS, pe serverul de reea;
- local, n c:\winnt\system32\drivers\etc\hosts ca text:
38.25.63.10 www.ceva.ro

Dificultatea realizrii unor pagini web coninnd date stocate n BD pe internet const n faptul
c trebuie corelate trei componente:
Server Web - IIS Microsoft, pentru stocarea i regsirea paginilor;
Visual Studio .NET ASP.NET, ca mediu de programare pentru crearea paginilor;
Server de BD - SQL Server, pentru gestiunea datelor.
Creare site Web

n fereastra IIS cu buton dreapta mouse pe calculatorul dorit, se alege New / Web site i se indic
adresa de IP nregistrat mai sus, plus drepturile de acces.

La ncercarea de conectare de la distan:


fie se afieaz directoarele din site (opiunea Directory Browsing activ);
fie se pred controlul unui document implicit (opiunea Default Document activat).

Cele dou opiuni se controleaz din consola IIS ( tab-urile Default documents i Directory
browsing); trebuie creat ns una din paginile: default.htm, default.asp, default.aspx, index.htm
etc.
Mixarea informaiilor ntr-o pagin web
O pagin Web poate conine:
cod html, recunoscut de orice browser;
cod ntr-un limbaj de programare recunoscut de ctre serverul care ine pagina Web;
cod script ntr-un limbaj de tip script, recunoscut de majoritatea browserelor ( JavaScript,
VB Script fiind cele mai rspndite limbaje de tip script).

15.10.2015

Modul n care se mixeaz aceste trei tipuri de cod complic oarecum nelegerea lucrurilor, dar este
foarte important pentru c el d ordinea n care se afieaz diferitele informaii n pagin. Din
punctul nostru de vedere, reinem dou dintre tag-urile care introduc cod scris ntr-un alt limbaj
dect html:
seciunea de precizare a codului
<scriptlanguage="C#"runat="server">codC#</script>

seciunea de folosire a codului


<% // apel cod C# %>

De obicei punem codul propriu-zis n prima parte a paginii, iar apelul codului (partea de
prezentare ) n interior, acolo unde dorim s apar efectul rulrii, n pagin.
Uzual, se practic i gruparea ntregului cod n fiier separat, tehnic denumit "code
behind"; la nceputul paginii se indic numele fiierului coninnd codul, iar n interiorul paginii se
trece apelul codului, ce va genera ca rezultat prezentarea paginii.
<%@ Page Language="c#" Src="fis.cs"%>
<% // apel cod C# %>

Cteva exemple complete vor clarifica cele discutate mai sus.


Exemplu DataOra.aspx Dinamicitate server-side
Cu un editor de text se introduce secvena de mai jos, ntr-un fiier DataOra.aspx plasat n
( tipul aspx este obligatoriu pentru a identifica programul care l trateaz):

c:\inetpub\wwwroot

<html>
<script runat="server" language="c#"> </script>
<% Response.Output.Write( System.DateTime.Now.ToString()); %>
</html>

i se apeleaz din Internet Explorer sub forma http://localhost/DataOra.aspx; ea va afia data


i ora exact. Observm c avem doar cod de redare, nu i cod propriu-zis; blocul script este gol n
acest caz i se pune doar pentru a preciza limbajul n care este scris codul de redare, lucru care sar fi putut da i n directiva de pagin. Pagina web de mai sus exemplific i tipologia de
dinamicitate server side, deoarece programul va arta alt coninut n funcie de momentul solicitrii
paginii; codul din server este cel responsabil n acest caz, cu extragerea i afiarea orei exacte.
Dac nu dispunem de serverul de web IIS instalat, putem starta serverul de web de sub Visual
Studio rulnd o aplicaie oarecare; ct timp serverul de dezvoltare e activ, modificm n linia de
adres din browser doar numele fiierului ce conine pagina (spre ex. nlocuim default.aspx, cu
DataOra.aspx, cu condiia ca fiierul s fi fost plasat n acelai director cu aplicaia care a
startat serverul, deoarece serverul vede directorul aplicaiei ca pe un director virtual ).
Observaie.
Save Target as... din browser salveaz pagina aa cum arat ea prelucrat (adic tradus n
html); n consecin, fiierul salvat cu Save Target as... la rularea paginii, cu extensia html, n
wwwroot, va afia la un nou apel n browser, mereu aceeai or !
Pentru fiierul iniial, ce conine codul de prelucrare, extensia fiierului trebuie s fie aspx,
pentru a anuna serverul cui s-o paseze pentru prelucrare, deoarece acest tip de fiier conine nu
forma prelucrat a paginii, ci instruciunile de prelucrare !
Exemplu DataOraJS.html Dinamicitate client-side
Cu un editor de text se introduce secvena de mai jos, ntr-un fiier numit DataOraJSP.html
plasat n c:\inetpub\wwwroot ( tipul html ne indic faptul c pagina poate fi prelucrat direct
de ctre browser):

15.10.2015

<html>
<script language="javaScript">
document.write( " <b> Dinamicitate client side:
</b>" );
azi = new Date();
document.write( azi.getDate(),"/ ",azi.getMonth()+1,
"/ ", azi.getYear(), " ",azi.getHours(),":",
azi.getMinutes(),":", azi.getSeconds() );
</script>
</html>

Aceast pagin realizeaz aproximativ acelai lucru ca n exemplul anterior, dar responsabil
cu aceast sarcin este de data aceasta browser-ul cu care un client navigheaz pe aceast pagin;
aadar browser-ul clientului este cel care interpreteaz script-ul Java i l execut, apoi afieaz
rezultatul. Ora afiat va fi cea de pe calculatorul clientului, nu cea din server; presupunnd c
paginile sunt vizualizate de pe aceeai main i ambele ceasuri arat bine ora exact, cele dou
exemple de mai sus vor afia ore diferite, dac server-ul se afl pe un alt fus orar dect calculatorul
client!
Exemplu functia.aspx
n acest exemplu vom avea ambele categorii de cod: n prima parte se prezint codul unei
funcii, iar n interiorul paginii se pune codul de vizualizare, care apeleaz aceast funcie i afieaz
ptratele rezultate prin rularea funciei.
<script runat="server">
double Patrate(double nr) { return (nr)*(nr); } </script>
<html>
<h2> Patratele primelor 10 numere naturale </h2>
<table border="2">
<tr>
<th> Numarul </th><th> Patratul </th>
</tr>
<%
for (double i = 1.0; i<=10.0; i++)
{
Response.Output.Write( "<tr><td>{0}</td><td>" +
"{1:f}</td><tr>", i, Patrate(i));
}
%>
</table>
</html>
Pagina se apeleaz n browser sub forma http://localhost/functia.aspx

Reiese c funcia ( n general, codul din blocul script ) nu este activat dect n momentul cnd
este solicitat de un eveniment sau de ctre un alt cod executabil, pus n partea de redare <%
%>. n exemplul nostru, apelul Patrate(i) invoc partea de cod din blocul script.
Reamintim c la client ajunge pagina deja prelucrat, astfel nct dac n browser cerem din
meniu View / Source, vedem ptratele deja calculate, browser-ul doar afindu-le.
Nepreciznd runat="server" se presupune c se execut implicit n browser.
ntr-o pagin se poate pune cod scris doar ntr-un singur limbaj, n cazul nostru C#.
Sensul codului de redare de mai sus este urmtorul: obiectul pagin are proprietatea
Response care este o referin la un obiect HTML de tip Response, ce conine rspunsul dat de
server la solicitarea unei pagini de ctre un client. Obiectul Response recunoate metodele
Response.Write() i Response.Output.Write() cu care putem aduga linii n rspunsul returnat
clientului; Response.Output.Write() permite chiar i scrierea de text formatat, pe care un
browser tie s-l interpreteze.

15.10.2015

O alt variant ar fi s punem funcia ntr-un fier separat, pe care s-l citm n clauza
lsnd n pagin doar partea de apel i de redare pagin. n ambele variante codul
surs se compileaz la momentul cererii paginii; vom vedea n continuare c o alternativ mai
eficient este s precompilm codul, mrind astfel viteza de rspuns la o cerere.
Src="fis.cs",

ASP.NET ofer alternativa obiectual pentru crearea i accesul la paginile Web. Documentul
html este mpachetat ntr-un obiect de clas WebForm1 sau _Default, derivat din clasa Page.
Ceea ce este cuprins ntre <script runat="server" language="c#"> i </script> se include
n aceast clas, iar ceea ce se specific ntre <% i %> poate fi imaginat ca o parte dintr-o
funcie Render() a clasei derivat din clasa Page.
Reiese c ntre <script> i </script> putem include funcii, pe cnd ntre <% i %> nu
dm dect elemente specifice redrii paginii Web, neputnd defini alte funcii deoarece ne aflm deja
n interiorul unei funcii ( adic n funcia Render() ).
Un exemplu n care codul mixat ntr-o pagin web nu este apelat explicit din zona de redare,
ci implicit, pe baz de eveniment semnalat la nivel de pagin ( evenimentul Page_Load ) ar fi
urmtorul:
Exemplu bdPage.aspx
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script language="c#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
string strSql = "SELECT codp, denum, pret FROM produse";
OleDbConnection con =
new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data" +
" Source=C:\prod.mdb");
try {con.Open(); }
catch(Exception ex) {mesaje.Text ="Eroare open conexiune"+ex.Message;}
OleDbCommand myCmd

= new OleDbCommand(strSql,con);

OleDbDataReader dr = myCmd.ExecuteReader();
while (dr.Read())
{
mesaje.Text+="\r\n"+dr["codp"]+ " " + dr["denum"]+ " " + dr["pret"];
mesaje.Text+="\r\n";
}
dr.Close(); con.Close();
}
</script>
<html>
<body>
<form id="Form1" method="post" runat="server">
<h4> Interogare BD folosind un obiect DataReader
</h4>
<asp:TextBox id="mesaje" runat="server" TextMode="MultiLine">
</asp:TextBox>
<h4> End Interogare BD </h4>
</form>
</body>
</html>
Se ruleaz dnd n linia de adres a browser-ului http://localhost/bdPage.aspx; trebuie
doar s ne asigurm c exist fiierul C:\prod.mdb coninnd o baz de date Access, cu tabela
produse i cmpurile: codp, denum i pret.

15.10.2015

Pregtirea paginii se face tot pe server; o problem care apare aici este cum va cltori
informaia extras de pe server ( spre exemplu, dintr-o baz de date) pn la client, pentru vizualizare
n browser. Putem defini o variabil la nivelul paginii, string strRezultat; ea este recunoscut i
de funcia Render(), dar i pierde coninutul ntre dou cereri succesive. Putem apela la un control
de tip TextBox, care va transporta informaia n proprietatea sa numit Text, folosit drept
container; acesta este mecanismul pentru care s-a optat n exemplul de mai sus, rolul de container
avndu-l TextBox-ul mesaje.
La ncrcarea paginii n server, se lanseaz evenimentul Page_Load, care apeleaz implicit
funcia de tratare cu acelai nume, moment n care se acceseaz baza de date i se adaug informaia,
linie cu linie, n textBox;
n rest, dup cum se poate observa, lucru cu obiecte .NET este cel uzual, chiar cnd e vorba
de obiecte pentru acces la baze de date.
Web Forms controls desemneaz server controls

Crearea unei aplicaii Web folosind Visual Studio


Sub .NET, File / New / Web Sites / ASP.NET Web Site i se alege un nume de aplicaie i ca
localizare se alege File System; pentru a se putea lucra rapid, cel puin pentru faza de realizare i
depanare a aplicaiei este preferabil aceast localizare.
Localizarea site-ului pe care se lucreaz se poate face alegnd una din opiunile:
File System dac se experimenteaz pe un site creat provizoriu ntr- un director local sau de
pe un alt calculator din reea expus ca partajabil (shared). Se poate crea i un director nou,
folosind icon-ul Create New Folder sau pur i simplu adugnd numele noului director, n
finalul unei ci de acces deja selectat. Rularea se face ntr-un server de web de testare, numit
ASP.NET Development Server i folosete un port, ales adhoc, nu pe cel folosit de IIS; avem
avantajul c putem muta directorul, cci el nu e luat n evidena IIS (metabaza IIS) ca director
virtual i nu e accesibil din Internet.

Local IIS dac dorim ca site-ul s se afle ntr-un director virtual recunoscut de server-ul de
web local (IIS). Cu icon-ul din colul dreapta-sus Create New Web Application se poate crea
chiar acum un nou director virtual.

FTP Site - cnd lucrm pe un site la distan ( sub alt IIS, dect cel local ) i-l accesm prin
FTP, furniznd informaiile de conectare (FTP site, port, director, user, password).

Remote Web Server - cnd lucrm pe un site la distan i-l accesm prin protocolul HTTP,
furniznd URL (uniform resource locator); n acest caz este nevoie s avem instalate extensiile
FrontPage; la conectare vom furniza user i password.

Spre deosebire de Windows Forms, aplicaiile Web au fereastra de vizualizare grafic (Designer)
cu mai multe formate de vizualizare, accesibile prin comutatorii din josul paginii:
- Design View vizualizarea grafic a controalelor din pagin, care permite lucru n regim
grafic; controlele din ToolBox vor fi selectate din tab-ul Web Forms, nu din Windows Forms.

15.10.2015

Source View vizualizare n format HTML a codului ce integreaz formularul Web. Se


observ aici descrierea html aferent controalelor adugate vizual pe form.

Rularea paginii de sub Visual Studio declanseaz activarea unui ASP Development Server,
folosind cte un port specific pentru comunicare; lansarea paginii din afara mediului Visual Studio se
poate face direct din Internet Explorer sau alt browser, indicnd adresa paginii ( ex.
http://localhost:1966/WebSite3/myPage.aspx) pe care o folosea i mediul cnd rulam sub
mediul integrat (extras din bara de adres) i va funciona dac serverul de dezvoltare este nc activ
la acel moment.
Specificarea altor detalii de trasare pagin se poate face folosind foi de stiluri.
Consultnd directorul n care a fost creat aplicaia ( C:\Inetpub\wwwroot\prima) observm mai
multe fiiere:

xxx.aspx conine codul de vizualizare a paginii Web (implicit se numete default.aspx);


xxx.aspx.cs conine codul surs C# pentru declaraiile controalelor i funciilor de tratare a
evenimentelor de la nivelul paginii. Un utilizator nu vede acest cod, chiar dac n browser
alege View/Source, cci codul vizibil n View/Source este cel deja prelucrat de server.
global.asax (dac se adaug la proiect / click mouse dreapta pe Solution Explorer); conine
informaiile i codul de tratare a evenimentelor de la nivel de aplicaie.
web.config conine detaliile de configurare a site-ului web i care sunt preluate cu
eventuale modificri la nivel de aplicaie.

ASP.NET ncepnd cu versiunea 2.0 folosete pentru dezvoltarea aplicaiei un server web
integrat; acesta lucreaz pe un port distinct de portul pe care lucreaz IIS, prevenind astfel
eventualele conflicte ce pot apare. Server-ul web ncorporat ruleaz o pagin web n numele
utilizatorului logat n Windows, deci cu eventuale privilegii extinse, fa de IIS care ruleaz cu
privilegii stricte, din considerente de securitate sporit.
n scopul prevenirii conflictelor de apartene a unei clase la mai multe namespace-uri, va
trebui dat calificarea complet a clasei; cum aceast ar putea fi prea lung, se poate folosi using
pentru a introduce un alias mai scurt:
using scurt = NumeDeSpatiuLung;
scurt.Cls ex;

15.10.2015

Ierarhiile din namespace-uri nu reflect neaprat derivri; la derivare clasele pot aparine unor
namespace-uri diferite.
Namespace-ul nu se confund cu library; o bibliotec dll are un corespondent fizic ( fiier dll ce
conine codul executabil aferent unor clase i funcii ), pe cnd namespace-urile sunt mai degrab
grupri logice ale unor clase i funcii.

Fazele de lucru cu o pagin Web


1. Iniializarea paginii este rezultatul unei cereri de la un browser; instaniaz controalele din
pagin i le iniializeaz cu valori indicate prin Properties; dac suntem pe postback (adic
pagina nu e la prima solicitare) valorile curente ale controalelor sunt extrase din ViewState i
folosite la iniializare. n aceast faz se declaneaz i evenimentul PageInit, dar e puin
folosit, cci se declaneaz nainte de instanierea i ncrcarea controalelor cu valori utile.
2. Iniializarea pe baza codului indicat de utilizator declaneaz evenimentul PageLoad i
deci va executa codul scris de programator n funcia de tratare PageLoad. Denumirea de
PageLoad este aleas pentru a sugera c uzual, pe server se ncarc i pagini care au mai fost
vizualizate n browser i se ntorc n server cu completri. In funcia de tratare PageLoad, pe
ramura !Page.IsPostBack se pot pune valori de iniializare ale controalelor; pe cealalt ramur
valorile nu trebuie puse cci se preiau automat (vezi faza anterioar) din ViewState. Dac
iniializm controlul prin cod, atunci trebuie pus EnableViewState pe false, altfel nu se justific
munca pierdut prin suprascrierea unor valori.
3. Validarea prin controale de validare este o faz asociat cu controalele de validare
introduse de ASP.NET; ea se derulez naintea oricror evenimente de utilizator.
4. Tratarea evenimentelor de utilizator este o faz derulat dup ce pagina e complet
ncrcat n server, iniializat i validat. n principiu, evenimentele de utilizator ar putea fi
mprite n dou categorii:

evenimente cu rspuns imediat (generate de controalele Auto PostBack pentru


evenimente ce trebuie notificate imediat serverului, pentru a fi tratate); intr n aceast
categorie evenimentul de Click pe diverse controale care-l recunosc;
evenimente de modificare ( de exemplu, TextChanged, IndexChanged ntr-un control
de selecie etc.; ele vor fi tratate nu imediat, ci la urmtoarea ncrcare a paginii n
server; dac dorim tratare imediat, proprietatea AutoPostBack a controlului respectiv
se pune pe true, ceea ce foreaz notificarea imediat a severului despre producerea
acestui tip de eveniment.

5. Legarea datelor este o faz care se deruleaz n dou trepte:


insert, delete i update se execut imediat dup producerea evenimentelor pe controale,
dar nainte de Page.PreRender();
select se execut dup Page.PreRender(), alimentnd cu date controalele legate la surse
de date; aceast succesiune are dezavantajul c funciile de tratare evenimente nu
beneficiaz de cele mai recente date, aduse n controale.
Legarea datelor se face automat la fiecare postback; dac se dorete scrierea de cod ce
folosete datele dintr-un control cu data-binding, acest cod poate fi pus numai ntr-o
suprancrcare a metodei Page.OnPreRenderComplete(), care se execut dup legare i nainte
de redarea paginii ca HTML. Uzual nu e nevoie de preluat date din control, cci datele pot fi
preluate direct din baza de date!

15.10.2015

6. Eliberarea resurselor se face dup ce au avut loc toate transformrile paginii n server i
pagina este redat ca HTML i pornete spre client. n acest moment se declaneaz
evenimentul Page.Unload i nicio modificare asupra paginii nu mai este posibil. Garbage
collector-ul elibereaz toate instanele de obiecte ce nu mai sunt referite i se declaneaz
evenimentul Page.Disposed, care ncheie ciclul de via al paginii n server.
Pentru aezarea mai flexibil n pagin se poate folosi un control de tip Table, care permite
plasarea diverselor controale n celule, cu posibilitatea de merge, resize, insert etc. Se recomand
controlul Table simplu, din seciunea HTML, nu cel din seciunea Standard, care ar necesita resurse
ASP.NET, la runtime.
Punctul de vedere n baza cruia s-au denumit evenimentele este cel al server-ului:
desemneaz ncrcare pagina pe server, pentru prelucrri; Page.PreRender pe server,
nainte de a o face HTML, Page.Unload plecare din server ctre client i eliberare resurse pe server.
Page.Load

Similar

stau

lucrurile

i pentru
Request
i Response; spre exemplu,
precizeaz c n rspuns, serverul cere browser-ului s fac o
cerere ctre o alt pagin newpage.aspx. Spre deosebire de aceasta, Server.Transfer("newpage.aspx");
nu presupune un du-te - vino de pagin, ci serverul n loc s prelucreze pagina cerut de browser,
prelucreaz o alta, dar de pe acelai server; n browser adresa paginii nu se schimb.
Response.Redirect("newpage.aspx");

Web server ul folosit este aici Internet Information Services [ IIS ] = inetinfo.exe
Internet Server Application Programming Interface (ISAPI) conine funcii DLL ce se ncarc
dinamic, n acelai proces cu serverul.
Avantaj: sunt rapide, partajabile. Pot fi mprite n dou categorii:
filtre ncrcate la iniializare server i folosite la tratarea evenimentelor la nivel de server;
extensii - ncrcate la prima solicitare i apoi partajate ntre aplicaii.
Dezavantaj: la euare, afecteaz tot serverul, fcnd parte din acelai proces.
1. IIS primete cererea i dup extensia de fiier vede ce DLL din ISAPI deservete cererea.
Dac extensia este .aspx, adic ASP.NET, atunci invoc funcia adecvat din
aspnet_isapi.dll pentru tratarea cererii ( n consola IIS, tab-urile MIME, respectiv
Handler Mapings pentru a vedea asocierile dintre extensiile de fiiere i executabilele ce
le deservesc; *.aspx e asociat cu PageHandlerFactory ).
2. Procesul
aspnet_isapi.dll transmite cererea ASP.NET ctre worker process
(aspnet_wp.exe), care o trateaz;
3. worker process compileaz fiierul .aspx obinnd un assembly, creaz un application
domain i instruiete maina virtuala CLR (Common Language Runtime) s execute
assembly-ul n contextul application domain creat
4. assembly folosete clase din FCL (Framework Class Library) pentru a rezolva cererea i
genereaz un rspuns;
5. worker process preia rspunsul generat, l mpacheteaz i-l transmite procesului din
aspnet_isapi.dll, care l transmite la rndul lui serverului IIS pentru a fi naintat clientului, la
distan.
Uzual, structura unei pagini include trei seciuni distincte:

10

15.10.2015

seciunea de directive, prin care se stabilesc condiiile de mediu n care pagina se va


executa, instruind HTTP runtime cum s proceseze pagina, eventuale namespace-uri folosite
n zona de codificare, controale noi de utilizator etc.
seciunea de cod, introdus prin tag-ul <script> i care precizeaz codul executabil folosit la
execuia unor comenzi din pagin (uzual precompilat, nu neaprat script, cum s-ar putea
nelege din delimitator);
seciunea de machetare, Page layout, reprezentnd scheletul paginii i preciznd cum se
mixeaz elementele de cod cu elementele vizuale din pagin ( controale, texte etc.)

Sintaxa directivelor este unic pentru toate directivele, iar n cazul atributelor multiple acestea
sunt separate cu un spaiu; nu trebuie separat cu spaiu semnul egal (=), de asignare a valorilor
unui atribut:
<%@ Directive_Name attribute="value" [attribute="value"...] %>

n cadrul unui formular web, adic ntre tag-urile <form id="Form1" method="post" >
</form> putem pune cod C#, declarat ca script:

Eventualele erori de compilare sunt raportate doar cnd se ruleaz pe aceeai main (
localhost ), dar se poate cere raportarea erorilor i cnd se ruleaz pe un server aflat la distan; n
acest scop n fiierul de configurare web.config, se pune n rubrica adecvat codul urmtor:
<compilation
defaultLanguage=c#
debug=true
/>

Rezultatul compilrii este un DLL i este pus n directorul c\winnt\Microsoft.Net\


...\Temporary
ASP.NET
Files. ( precum i n directorul aplicaiei
c:\inetpub\wwwroot\... \.bin ). Dac nu s-au fcut modificri n surs, la urmtoarea rulare nu se
mai compileaz.
Framework\

Se pot cere mesaje detaliate ( click pe Show Detailed Compiler).


Concret, n fiierul Default.aspx.cs se definete dinamic o clas _Default , derivat din clasa
System.Web.UI.Page.
double Patrate(double nr) dintr-unul din exemplele de mai sus, este o metod a acestei clase,
dar clasa fiind generat dinamic dispune i de alte metode; spre exemplu. codul repetitiv din sursa
de mai sus plasat ntre <%...%> este pasat unei metode numit __Render__control1() pentru
redare.

Utilizarea unor controale Web simple


1. Se poate rula o pagina ce face adunarea a dou numere, la apsarea pe un buton:
private void btnAduna_Click(object sender, System.EventArgs e)
{
double s = double.Parse(a.Text)+double.Parse(b.Text);
r.Text=s.ToString();
}

unde a,b i r sunt trei textBox-uri.


S se modifice programul astfel nct n funcie de selecia dintr-un control
DropDownList, la apsarea pe buton s se efectueze Adunare, Scdere sau nimic (None).

11

15.10.2015

S se modifice programul astfel nct s se renune la buton, operaia declanndu-se


automat la schimbarea seleciei din DropDownList.
2. Aplicatie cu o macheta de introducere date, care la Save face mutarea datelor ntr-un textBox
multiline (sau in ListBox ).
3. Pentru familiarizarea cu mediul .NET se va elabora o aplicaie simpl, exemplificnd lucrul cu
controale de tipul: Button, TextBox, RadioButton, DropDownList, AddRotator, Calendar.
TextBox; RadioButton;Button
Mai nti se vor aduce din Toolbox controale de tip TextBox, Label, RadioButton i se vor
completa corespunztor proprietile dorite, ca n figura de mai jos.
Se adaug apoi trei textBox-uri cu identificatorii a, b i r i un buton inscriptionat cu +, care la
apsare (evenimentul Click) declaneaz adunarea a dou numere i afiarea rezultatului. Funcia
pus ca tratare a mesajului emis la de buton ar putea arta astfel:
private void btnAduna_Click(object sender, System.EventArgs e)
{
double s = double.Parse(a.Text)+double.Parse(b.Text);
r.Text=s.ToString();
}

DropDownList

Se aduce prin dragare din ToolBox un control DropDownList i se populeaz adugnd cteva
linii n colecia (proprietatea) Items;
i se fixeaz proprietatea AutoPostBack pe true, pentru a anuna serverul de orice schimbare de
selectie;
se trateaz evenimentul SelectedIndexChanged prin funcia:
private void cbModel_SelectedIndexChanged(object sender, System.EventArgs e)
{
tbTip.Text = cbModel.SelectedValue;
}

funcia preia valoarea selectat i o pune ntr-un TextBox numit tbTip.

AddRotator

12

15.10.2015

Fiierul reclama.xml se adaug la proiect cu meniu Project (WebSite) / Add Existing Item...
<?xml version="1.0" encoding="utf-8" ?>
<Advertisements>
<Ad>
<ImageUrl>p29.jpg</ImageUrl>
<NavigateUrl>http://localhost/WebApplication10/</NavigateUrl>
<AlternateText>Doctorat</AlternateText>
<Impressions>40</Impressions>
<Keyword>Curs</Keyword>
<Specialization>Acces INTERNET </Specialization>
</Ad>
<Ad>
<ImageUrl>p30.jpg</ImageUrl>
<NavigateUrl>http://localhost/WebApplication10/ </NavigateUrl>
<AlternateText> Biblioteca Academiei </AlternateText>
<Impressions>30</Impressions>
<Keyword>Books</Keyword>
<Specialization>Books for Professionals
</Specialization>
</Ad>
<Ad>
<ImageUrl>p31.jpg</ImageUrl>
<NavigateUrl>http://localhost/WebApplication10/</NavigateUrl>
<AlternateText> Libraria ASE </AlternateText>
<Impressions>30</Impressions>
<Keyword>Books</Keyword>
<Specialization>Academic Books</Specialization>
</Ad>
</Advertisements>

Se adaug un control AddRotator care este capabil s afieze aleator, la fiecare schimbare de
pagin, cte o imagine cu text asociat ;
i se pune proprietatea AdvertisementFile pe valoarea reclama.xml;
ne preocupm s existe fiierele imagine citate n reclama.xml.

Calendar

Se dragheaz un control Calendar i i se fixeaz proprietatea SelectionMode pe valoarea


DayWeekMonth;
i se trateaz evenimentul SelectionChange cu funcia:
private void Calendar1_d(object sender, System.EventArgs e)
{
string sbMesaj="";
for( int k=0; k < Calendar1.SelectedDates.Count; k++)
sbMesaj += Calendar1.SelectedDates[k].ToShortDateString()
+ "<br>";
lblMesaj.Text = sbMesaj;
}

Funcia preia datele selectate din calendar i le pune ntr-un control Label lblMesaj.

13

15.10.2015

Clasa Page
Ierarhia derivrii:
System.Object
System.Web.UI.Control
System.Web.UI.TemplateControl
System.Web.UI.Page

deci clasa Page este i un control avnd o mulime de proprieti i evenimente pe care le recunoate.
Este i container de controlale, colecia Controls furniznd acces la controalele de pe pagin.
Aa cum aminteam, etapele crerii paginii sunt semnalate prin evenimente ce pot fi interceptate
i folosite pentru a plasa cod de utilizator pentru executat legat de acel moment:
- Init generat la crearea unei instane de tip Page; se poate folosi i pentru a ataa dinamic
handlere altor evenimente recunoscute de pagin i declanate ulterior.
-

la terminarea iniializrii i ncrcarea obiectului Page n memorie; se poate folosi i


pentru a ataa cod de iniializare controalelor de pe pagin.
PreRender declanat nainte de redarea vizual a paginii pe ecran; e folosit pentru
eventuale retuuri nainte de a trimite pagina n browser pentru trasare.
Unload la descrcarea paginii din server ( page cleanup).
Load

Tratarea evenimentelor permite aplicaiilor s se adapteze dinamic la schimbrile contextuale din


mediul de rulare
<%...%>

e un bloc de redare a interfeei i se pune n interiorul unei metode;


deci nu poate conine definirea unei alte metode !

Tratarea unui eveniment se poate face ntr-una din modalitile:


1. adugnd un handler la delegatul disponibil pentru acel eveniment;
2. sau suprancrcnd metoda (OnXxxx() ) motenit din clasa de baz.
Varianta cu handler este avantajoas deoarece:
- nu cere ca tratarea s se fac ntr-o clas derivat din clasa de baz (suprancrcarea metodei
(OnXxxx() se poate face doar n clasele derivate dintr-o clas de baz );
- permite ataarea / detaarea dinamic a mai multor metode de tratare a aceluiai eveniment;
- aceeai funcie de tratare se poate aplica i altor evenimente fr a o rescrie n diverse clase.
n .NET exist clasa care descrie un delegat generic, numit EventHandler; instanierea clasei
produce un obiect delegat i presupune furnizarea prototipului funciilor de tratare ce le va conine.
Declaraia prototipului acestui delegat este deja facut n mediul de programare:

14

15.10.2015

public delegate void EventHandler(object sender, EventArgs e);

i arat c acest tip de delegat poate ine referina oricrei funcii ce primete un obiect generic i un
bloc de parametri cu argumentele specifice unui eveniment generic i returneaz void.
Cnd adugm unui eveniment o funcie de tratare, se instaniaz un nou delegat, care prin
constructor primete i referina pe care o va transporta:
this.Load += new EventHandler(tratareLoad);

Se observ aici evenimentul ( Load ), delegatul generic (EventHandler) i numele funciei de


tratare ( tratareLoad ).
Mecanismul AutoEventWireup="true"
n aplicaiile Web mai exist un mecanism de ataare a unor funcii de tratarea evenimentelor
unei pagini Web numit mecanism AutoEventWireup. Este cel de-al treilea mecanism de ataare cod
executabil unor evenimente, alturi de suprancrcarea funciilor motenite din clasa de baz,
respectiv mecanismul delegrii.
El se activez numai dac pagina are atributul AutoEventWireup = "true" i se bazeaz pe
definirea de ctre programator a unor funcii de tratare cu
nume impus, de forma
Page_EventName().
Presupunem c se creeaz o aplicaie Web numit AprindereAutomat. n fereastra de
vizualizare se alege formatul HTML i se modific codul surs pentru a arta astfel:
<%@ Page Language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="true"
Inherits="AprindereAutomata.WebForm1"%>
<!--Exemplificare mecanism AutoEventWireup -->
<HTML>
<body>
<script runat="server">
protected void Page_Load(Object o, EventArgs e)
{Response.Write("Mesaj din functia de tratare eveniment Load .<br>");}
protected void Page_Init(Object o, EventArgs e)
{Response.Write("Acum se produce eveniment Page_Init .<br>");}
protected void Page_PreRender(Object o, EventArgs e)
{Response.Write("Mesaj pentru eveniment PreRender .<br>");}
</script>
<hr>
</body>
</HTML>

Atenie cnd textul surs se preia cu Copy / Paste, ghilimelele trebuie s fie cele drepte, nu "smart" !

Clauza AutoEventWireup="true", altfel Visual Studio o pune implicit pe false.


Exemplul funcioneaz de sine stttor, fr a necesita construire de delegai de evenimente i ataare
de funcii de tratare. Preul pltit este c funciile de tatare au nume impus, corelat cu evenimentul la
care se refer: Page_Load, Page_Init, respectiv Page_PreRender.
Nu

se

recomand
folosirea
simultan
a
mecanismelor
delegate
i
AutoEventWireup="true" deoarece unele din funciile de tratare pot fi apelate de dou ori;
explicaia const n faptul c n cadrul mecanismului AutoEventWireup ASP.NET leag automat la
delegaii corespunztori, metodele cu numele impus, iar cnd programatorul ataeaz metodele cu +=
le leag a doua oar!

15

15.10.2015

Exemplul de mai sus se putea da i ca fiier text, ataabil la un proiect vid, nemaifiind
necesar trimiterea la fiierul cu cod surs Codebehind="WebForm1.aspx.cs", care oricum nu
aducea n plus ceva major.
Mecanismul code-behind separ codul necesar descrierii interfeei utilizator (user interface)
de codul ce detaliaz algoritmii de prelucrare (business logic). Prima categorie se pune n fiierul de
tip .aspx, cea de-a doua n fiierul .cs; astfel este posibil i lucru n echip, designerii ocupndu.se de
proiectarea vizual a paginii, iar programatorii de prelucrri.
Cele dou fiiere sunt legate prin atributul Codebehind din directiva Page; acesta precizeaz fiierul
cu cod surs . Linkeditarea apare astfel ca fiind iniiat din pagina de utilizator.
Directiva Page precizeaz atribute necesare compilrii i vizualizrii paginii Web.
Src - citeaz numele fiierului surs ce conine clasa code-behind care este compilat dinamic la
solicitarea unei pagini Web. Cnd folosimVisual Studio .NET nu este nevoie de acest atribut doarece
clasa code-behind este precompilat.
Inherits furnizeaz numele clasei code-behind ce conine codul paginii ASPX i din care clasa
generat dinamic va moteni prin derivare.
Desi Src furnizeaz aceeai informaie ca atributul Codebehind; ntre ele exist o deosebire
major: Src e necesar cnd compilarea se face la momentul vizualizrii paginii. Visual Studio a
optat pentru precompilarea codului ce nsoete pagina Web. Pentru c mediul Visual Studio separ
i el codul de vizualizare de cel de prelucrare, are totui nevoie la momentul proiectrii aplicaiei de
numele fiierului ce ine codul surs C#, pentru a-l compila din vreme; acesta e indicat prin
Codebehind. Aadar, Codebehind este un atribut neles i folosit numai de VS (nu i de
ASP.NET la execuia paginii) pentru localizarea fiierului surs ce conine definirea claselor folosite
n pagin.
Asocierea Src i Inherits sugereaz o pagin fr compilare prealabil.
Asocierea Codebehind i Inherits sugereaz o pagin cu precompilare
Precompilarea are urmtoarele avantaje:
- ne asigur c am rezovat toate erorile de compilare;
- nu mai trebuie dat beneficiarului codul surs, ci doar dll-urile;
- chiar cnd pe calculatorul beneficarului exist alt versiune de .NET, clasa folosete
versiunea cu care a fost ea creat.
Meniu Project / Show All Files permite vizualizarea n Solution Explorer a tuturor fiierelor
folosite n cadrul unui proiect, altfel implicit sunt vizibile doar o parte dintre ele.
Fiierul de configurare Web.config conine toate clauzele de configurare a proiectului, inclusiv
debug = true, necesar cnd aplicaia nu poate fi rulat n mod depanare, cci ea a fost compilat
fr opiuni de depanare. Punnd-o pe true, ne asigurm c recompilarea se face cu adugarea tuturor
facilitilor de depanare.
Ildasm.exe (Intermediate Language Disassembler) poate vizualiza EXE i DLL ntr-un format
accesibil utilizatorului.
Tipologia controalelor dintr-o aplicaie ASP.NET

HTML Controls preluate din HTML clasic; accesul la informaii este greoi (trebuie analizat
pagina de rspuns).

16

15.10.2015

HTML Server Controls identice cu cele de mai sus, dar prin runat = server devin
accesibile prin program i ruleaz pe server; asigur acces uor la informaii prin intermediul
proprietilor i evenimentelor.
Web Server Controls specifice ASP.NET; acoper toate controalele de mai sus i ceva n plus;
ofer alt model, mai consistent, de programare.
Validation Controls
User Controls, Composite Controls i CustomControls extensii sau adaptri, create de
utilizator

Web Server Controls


- orientate obiect; built-in i recunoscute automat de browser-ele de nivel nalt;
- unele produc postback imediat la click sau la schimbare de valori;
- unele las mesajele primite s ajung i mai sus, la containerul controaleleor.
Au numele prefixat cu asp: , ca mai jos:
<asp:Label runat=server/>
Label - <span>
TextBox - <input type=text>, <input type=password>, <textarea>
Proprietatea AutoPostBack a unui textBox precizeaz cnd pagina va fi transmis server-ului
automat la orice modificare a textului sau cnd evenimentul TextChanged va fi tratat de client. Este
efectiv doar dac browser-ul suport client-side scripting. ASP.NET ataeaz controlului un mic
script ce face ca evenimentul s fie transmis serverului cu ocazia altui eveniment, uzual Click de
buton.
Image <img>
ImageUrl

indic locaia URL n care rezid imaginea de afiat

CheckBox i RadioButton - <input type=checkbox> i <input type=radio>


Proprietatea AutoPostBack precizeaz cnd pagina va fi transmis server-ului la schimbarea
strii butoanelor.
Button - <input type=submit>
LinkButton - hyperlink , <a> tratat doar de browsere ce suport client-side scripting
ImageButton - <input type=image> ImageClickEventsArgs ncapsuleaz informatii despre
coordonatele punctului din imagine unde s-a dat click.
Repeater, DataList, DataGrid suport bubbling de evenimente, adic posibilitatea ridicrii automate
a evenimentelor ctre controlul printe.
Dup modul n care sunt sesizabile la nivelul serverului, evenimentele din pagina web se mpart n
dou categorii:
Postback, care sunt anunate imediat serverului;
Non-postback, care nu sunt anunate imediat serverului, pentru a nu mri excesiv traficul n
reea.
Evenimentele non-postback sunt evenimente mrunte, cu rol mai ales local, la nivelul paginii
( spre exemplu, completarea unor rubrici ntr-un formular - TextChanged), urmnd ca dup mai
multe astfel de evenimente s se genereze un eveniment de tip postback ( Click pe un buton
Submit) care s permit transferul spre server al tuturor modificrilor produse n pagin.

17

15.10.2015

Controalele care genereaz evenimente dein o proprietate boolean AutoPostBack, cu valori


implicite, prin care se specific dac evenimentele generate de acestea sunt postback sau nonpostback. Dup valoarea implicit a acestei proprieti putem distinge:

controale postback : Button, Calendar, DataGrid, DataList, ImageButton, LinkButton,


Repeater.
controale
non-postback:
CheckBox, CheckBoxList, DropDownList, ListBox,
RadioButtonList, RadioButton, TextBox.

Modificnd valoarea proprietii AutoPostBack putem schimba dinamic "vizibilitatea"


acestor evenimente la nivelul serverului. Putem observa ns, c la un moment dat, toate
evenimentele generate de un control sunt fie postback, fie non-postback.

Categorii de controale
tag HTML

<input>

<img>

<textarea>

<a>

<button>

<form>

<table>

<td> <th>

<tr>

<select>

Categoria

Nume HTML

Descriere
<input type=button | submit | reset>
<input type=checkbox>
<input type=file>
<input type=hidden>
<input type=image>
<input type=radio>
<input type=text | password>

Input

HtmlInputButton
HtmlInputCheckBox
HtmlInputFile
HtmlInputHidden
HtmlInputImage
HtmlInputRadioButton
HtmlInputText

Input

HtmlImage

Image

Input

HtmlTextArea

Text multilinie

Container

HtmlAnchor

Ancor

Container

HtmlButton

Customizable output format, usable with IE


4.0 and above browsers

Container

HtmlForm

Maximum of one HtmlForm control per page;


default method is POST

Container

HtmlTable

Tabel, format din linii, ce conin celule

Container

HtmlTableCell

Celul de tabel sau celul antet de tabel

Container

HtmlTableRow

Linie de tabel

Container

HtmlSelect

Meniu pull-down

18

15.10.2015

Categorii de controale
tag HTML

Categoria
Container

Nume HTML
HtmlGenericControl

19

Descriere
Control HTML generic

15.10.2015

S-ar putea să vă placă și