Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 17

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); 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.
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;
asigur regsirea i disponibilitatea paginilor de pe un site.
Tehnologia CGI Common Gateway Interface
Avantaje:
acces la resursele sistemului de operare;
vitez bun de execuie, dac aplicaia CGI este deja compilat
Dezavantaje:
depanare dificil;
se execut n proces separat, consumnd multe resurse.

10.01.2013

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 redate ca
HTML, pentru a fi recunoscute i tratate de 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; compilarea 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.

Directorul fizic c:\inetpub\wwwroot;


Director virtual Virtual Directory, este o legtur ctre un alt director aflat fizic n afara arborelui
site-ului Web.
- Start / Programs / Administrative Tools / Internet Service Manager ( sau Start /
Settings / Control Panel / Administrative Tools / Internet Information Services ) 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.
- Dac nu e startat IIS l putem starta de aici: mouse right pe Default Web Site / Play sau
Restart IIS; nu necesit restartarea calculatorului.
- O alt modalitate de a ajunge n fereastra de startare IIS: Start / Run inetmgr permite i
stabilirea unor 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 2008 beneficiaz de propriul director virtual, creat odat cu aplicaia; cele
create cu Visual Studio 2005 / 2008 pot rula i n afara IIS, sub un server web de dezvoltare;
ele vor fi aduse la finalizare (deployment) ntr-un director virtual, fiind nregistrate n
metabaza IIS, pentru ca site-ul s fie vizibil din afara aplicaiei.

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

Control Panel / Administrative Tools / Computer Management / Services & Apps / IIS / Web
10.01.2013
Sites / Default Web Site cu click mouse dreapta / Properties se poate schimba portul prin care
se
2
comunic cu serverul: TCP Port = 80 sau 81.

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 (Enable Default Document activat).
Cele dou opiuni se controleaz din fereastra IIS, click mouse dreapta pe site-ul dorit / Properties.
Trebuie creat ns una din paginile: default.htm, default.asp, default.aspx.
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).
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 cod
<script language="C#" runat="server">

cod C#

</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 s-ar fi
putut da i n directiva de pagin. Pagina web de mai sus exemplific i tipologia de dinamicitate

10.01.2013

server side, deoarece programul arat alt coninut n funcie de momentul solicitrii paginii; serverul
este 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 VS
2008 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. default.aspx, cu DataOra.aspx, cu
condiia ca fiierul s fi fost plasat n acelai director cu aplicaia care a startat serverul, cci serverul
vede directorul ca pe unul virtual ).
Observaie.
Save Target as... din browser salveaz pagina aa cum arat ea prelucrat (tradus n html);
astfel 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 fiierul 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 DataOraJSP.html plasat
n c:\inetpub\wwwroot ( tipul html ne indic faptul c pagina poate fi prelucrat direct de ctre
browser):
<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 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 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 clientul!
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 ruarea 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));
}

10.01.2013

%>
</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.
O alt variant ar fi s punem funcia ntr-un fier separat, pe care s-l citm n clauza
Src="fis.cs", 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.
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 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())

10.01.2013

{
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.

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 2005
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.

10.01.2013

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.

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 VS 2005 declanseaz activarea unui ASP Development Server,
folosind cte un port specific pentru comunicare; lansarea paginii din afara mediului Visual Studio
2005 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 rulm sub
mediul integrat (extras din bara de adres) i funcioneaz dac serverul de dezvoltare este inc
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 numeste 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 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.

10.01.2013

ASP.NET 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 rula cu privilegii reduse, 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;

Ierarhiile din namespace-uri nu reflect neaparat 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. 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
dubl.
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 (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
evenimentului.

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();

10.01.2013

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.
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: Page.Load
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.
Similar

stau

i pentru Request i Response; spre exemplu,


Response.Redirect("newpage.aspx"); 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.
worker process =

lucrurile

aspnet_wp.exe

Web server = 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 ( vezi Control Panel / Administrative Tools / IIS /
Default Web site / Properties cu mouse dreapta alegem pagina Home Directory i apsm
butonul Configuration pentru a vedea asocierile dintre extensiile de fiiere i executabilele
ce le deservesc ).
2. Procesul
aspnet_isapi.dll transmite cererea ASP.NET ctre worker process
(aspnet_wp.exe), care o trateaz;

10.01.2013

3. worker process compileaz fiierul .aspx obinnd un assembly, creaz un application


domain i instruiete CLR s execute assembly-ul n contextul application domain creat
4. assembly folosete clase din BCL pentru a rezolva cererea i genereaz un rspuns;
5. worker process preia rspunsul generat, l mpacheteaz i-l transmite procesului
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:

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 <form id="Form1" method="post" >
putem pune cod C#, declarat ca script:

</form>

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, n care 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\


Framework\
...\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.
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.
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.
double Patrate(double nr)

Utilizarea unor controale Web simple


Pentru familiarizarea cu mediul .NET se va elabora o aplicaie simpl, exemplificnd lucrul
cu controale de tipul: Button, TextBox, RadioButton, DropDownList, AddRotator,
Calendar.

10

10.01.2013

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 si 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
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>

11

10.01.2013

<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.

12

10.01.2013

Un alt exerciiu care s ne apropie mai mult i de partea de gestiune a datelor, ar putea fi o aplicaie
cu o machet de introducere date, care la Save face mutarea ntr-un textBox multiline sau ntr-un
ListView.
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 captate 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:
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);

13

10.01.2013

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
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!
AutoEventWireup="true"

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.

14

10.01.2013

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).
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

15

10.01.2013

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.
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.

16

10.01.2013

Categorii de controale
tag HTML

Categoria

Nume HTML

Descriere

<input>

Input

HtmlInputButton
HtmlInputCheckBox
HtmlInputFile
HtmlInputHidden
HtmlInputImage
HtmlInputRadioButton
HtmlInputText

<img>

Input

HtmlImage

Image

<textarea>

Input

HtmlTextArea

Text multilinie

<a>

Container

HtmlAnchor

Ancor

<button>

Container

HtmlButton

Customizable output format, usable with IE


4.0 and above browsers

<form>

Container

HtmlForm

Maximum of one HtmlForm control per


page; default method is POST

<table>

Container

HtmlTable

Tabel, format din linii, ce conin celule

<td> <th>

Container

HtmlTableCell

Celul de tabel sau celul antet de tabel

<tr>

Container

HtmlTableRow

Linie de tabel

<select>

Container

HtmlSelect

Meniu pull-down

Container

HtmlGenericControl

Control HTML generic

17

<input type=button | submit | reset>


<input type=checkbox>
<input type=file>
<input type=hidden>
<input type=image>
<input type=radio>
<input type=text | password>

10.01.2013

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