Sunteți pe pagina 1din 18

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; intercepteaz cererile i 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.

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

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.

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.

28.02.2013

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

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
>r <ci p l / s

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

28.02.2013

c:\inetpub\wwwroot

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

<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 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 2010 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 rularea funciei.
<script runat="server">

28.02.2013

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

28.02.2013

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.

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:
28.02.2013

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.

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.

28.02.2013

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 / 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;

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

28.02.2013

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

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"); worker process = aspnet_wp.exe

Similar

stau

lucrurile

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.

28.02.2013

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. 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 ). Procesul aspnet_isapi.dll transmite cererea ASP.NET ctre worker process (aspnet_wp.exe), care o trateaz; worker process compileaz fiierul .aspx obinnd un assembly, creaz un application domain i instruiete CLR s execute assembly-ul n contextul application domain creat assembly folosete clase din BCL pentru a rezolva cererea i genereaz un rspuns; 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.

1.

2. 3. 4. 5.

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

10

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


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). S se modifice programul astfel nct s se renune la buton, operaia declanndu-se automat la schimbarea seleciei din DropDownList. 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.
2.

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

28.02.2013

11

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

28.02.2013

12

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

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

28.02.2013

13

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

28.02.2013

14

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

Nu

se

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

15

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

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

16

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. Categorii de controale tag HTML
<input>

Categoria Input

Nume HTML HtmlInputButton HtmlInputCheckBox HtmlInputFile HtmlInputHidden HtmlInputImage

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

28.02.2013

17

Categorii de controale tag HTML Categoria Nume HTML HtmlInputRadioButton HtmlInputText


<img> <textarea> <a> <button> <form> <table> <td> <th> <tr> <select>

Descriere <input type=radio> <input type=text | password> Image Text multilinie Ancor Customizable output format, usable with IE 4.0 and above browsers Maximum of one HtmlForm control per page; default method is POST Tabel, format din linii, ce conin celule Celul de tabel sau celul antet de tabel Linie de tabel Meniu pull-down Control HTML generic

Input Input Container Container Container Container Container Container Container Container

HtmlImage HtmlTextArea HtmlAnchor HtmlButton HtmlForm HtmlTable HtmlTableCell HtmlTableRow HtmlSelect HtmlGenericControl

28.02.2013

18

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