28.01.2015 Views

Introducere in ASP.NET Controale Web Pagina in ... - Profs.info.uaic.ro

Introducere in ASP.NET Controale Web Pagina in ... - Profs.info.uaic.ro

Introducere in ASP.NET Controale Web Pagina in ... - Profs.info.uaic.ro

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 1/30<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

<st<strong>ro</strong>ng>Int<strong>ro</strong>ducere</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng><br />

Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Timpul de viata al pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii<br />

P<strong>ro</strong>cesarea pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> de tip lista<br />

Structura unei aplicatii <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Bibliografie<br />

P<strong>ro</strong> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 3.5 <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> C# 2008, Second Edition:<br />

-2007 by Matthew MacDonald and Mario Szpuszta<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 2/30<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Caracteristici <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>:<br />

Integrat cu .<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> Framework<br />

Compilat, nu <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>terpretat<br />

Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este compilata cand este accesata prima data.<br />

Multilimbaj<br />

Gazduit de Common Language Runtime<br />

Orientat-obiect<br />

Ruleaza pe orice b<strong>ro</strong>wser<br />

Usor de configurat si distribuit<br />

Caracteristicile pr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>cipale ale unei aplicatii web<br />

Aplicatiile web se executa pe server.<br />

Cererile clientului sunt p<strong>ro</strong>cesate pe server folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d o tehnica numita postback, care<br />

trimite pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a pe server cand sunt <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>depl<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ite anumite conditii. Dupa ce primeste pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a,<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> genereaza evenimentele pe partea de server pentru a notifica codul (a apela<br />

metodele atasate evenimentelor).<br />

Aplicatiile <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> sunt fara stare.<br />

Dupa ce pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este retransmisa clientului aceasta este distrusa d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> memoria<br />

serverului. Exista mecanisme ce asigura o anumita persistenta a datelor, cel mai cunoscut<br />

fi<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d « view state », ce pastreaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatia <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> campuri « ascunse » (hidden).<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 3/30<br />

Formulare HTML<br />

In HTML forma cea mai simpla de a trimite date de la client la server o constituie utilizarea<br />

formularelor (tag ). Un formular poate cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e mai multe cont<strong>ro</strong>ale, <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> fapt este un<br />

conta<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>er pentru cont<strong>ro</strong>ale.<br />

Exemplu<br />

<br />

<br />

<br />

<br />

P<strong>ro</strong>grammer Questionnaire<br />

<br />

<br />

<br />

<br />

Enter your first name:&nbsp;<br />

<br />

<br />

Enter your last name:&nbsp;<br />

<br />

<br />

<br />

You p<strong>ro</strong>gram with:<br />

<br />

&nbsp;&nbsp;&nbsp;<br />

C#<br />

<br />

&nbsp;&nbsp;&nbsp;<br />

VB .<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Observatie<br />

Acest formular cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e urmatoarele cont<strong>ro</strong>ale: doua TextBox-uri, doua CheckBox-uri si un<br />

Button. Operatia folosita de formular este POST.<br />

P<strong>ro</strong>pritatea name a cont<strong>ro</strong>lului permite accesarea <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatiei d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cont<strong>ro</strong>l (cod C#).<br />

Pe partea clientului se va afisa pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a:<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 4/30<br />

Cand utilizatorul face clic pe butonul “OK” (textul d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> buton este Submit), b<strong>ro</strong>wser-ul<br />

colecteaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatia d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cont<strong>ro</strong>ale, o concateneaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un str<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g si apoi o trimite serverului<br />

folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d operatia HTTP POST.<br />

Informatia trimisa cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e o serie de perechi nume/valoare separate pr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> &.<br />

Pentru cont<strong>ro</strong>alele ce au valori booleene se va transmite numai valoarea « on » cand aceste<br />

cont<strong>ro</strong>ale sunt activate.<br />

Exemplu de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatie transmisa catre server.<br />

FirstName=Matthew&LastName=MacDonald&CS=on&VB=on<br />

Daca schimbam pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>, putem determ<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a valoarea d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cont<strong>ro</strong>l folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>taxa<br />

C#.<br />

str<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g firstName = FirstName.Text;<br />

sau ceva de genul:<br />

str<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g firstName = Request.Form["FirstName"];<br />

Observatie<br />

In exemplul de mai sus FirstName (cu sau fara acolade) este numele cont<strong>ro</strong>lului.<br />

In <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> toate cont<strong>ro</strong>alele sunt plasate <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gur tag , tag marcat cu atributul<br />

runat="server". Cont<strong>ro</strong>lul este un conta<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>er de cont<strong>ro</strong>ale.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 5/30<br />

Anatomia unei aplicatii <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Toate pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ile web d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o aplicatie web partajeaza aceleasi resurse de memorie, date globale<br />

la nivel de aplicatie, date la nivel de sesiune, date d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cache.<br />

Toate pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ile web d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o aplicatie web partajeaza aceleasi setari de configurare. Pot fi<br />

realizate setari diferite pentru subdirectoare <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dividuale ale aceluiasi director virtual.<br />

Toate aplicatiile web genereaza evenimente globale la nivel de aplicatie <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> diferite etape ale<br />

executiei. Se foloseste fisierul Global.asax.<br />

Directorul virtual este structura de baza pentru o aplicatie <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>.<br />

Aplicatiile <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> pot cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e urmatoarele :<br />

Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>i <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> (fisiere .aspx) .<br />

Servicii <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> (fisiere .asmx) – comunicare cu aplicatii de pe alte platforme. Servicii<br />

WCF.<br />

Fisiere ce cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod (code-beh<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d)<br />

Fisier de configurare (web.config).<br />

global.asax – cod pentru evenimente generate la nivel de aplicatie.<br />

Alte componente.<br />

Structura de directoare a aplicatiei<br />

Fiecare aplicatie trebuie sa aiba o structura b<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e planificata de directoare si subdirectoare.<br />

In plus fata de acestea, <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>este urmatoarele directoare :<br />

Director<br />

Descriere<br />

B<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

Cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e assemblies .<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> precompilat (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mod abisnuit DLL)<br />

folosite de aplicatia <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>.<br />

App_Code<br />

Cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e fisiere cod sursa ce sunt compilate <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mod d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>amic pentru a<br />

fi folosite <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aplicatie. Codul compilat nu apare <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> directorul b<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>.<br />

Daca se foloseste modelul de p<strong>ro</strong>iect si nu cel <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> Site atunci acest<br />

director nu este necesar.<br />

App_GlobalResources Ment<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e resursele globale accesibile fiecarei pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>i d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aplicatie.<br />

App_LocalResources Resurse numai pentru o pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a dedicata.<br />

App_<st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>References Ment<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e refer<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te la serviciile <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> folosite de aplicatie. Fisiere<br />

WSDL si documente UDDI (Universal Description Discovery and<br />

Integration).<br />

App_Data<br />

Rezervat pentru baze de date si fisiere XML.<br />

App_B<strong>ro</strong>wsers Cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itiile b<strong>ro</strong>wser-ului memorat <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> fisiere XML.<br />

App_Themes<br />

Cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e « themes » folosite de aplicatie.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 6/30<br />

Fisierul aplicatie global.asax<br />

Aici se scriu metodele si codul pentru tratarea evenimentelor globale la nivel de aplicatie.<br />

Clientul nu acceseaza acest fisier.<br />

Fisierul este optional.<br />

Acest fisier nu cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e tag-uri HTML sau <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>, ci metode cu un nume predef<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>it.<br />

Evenimentele aplicatiei<br />

Evenimente ce apar la fiecare cerere.<br />

Evenimente ce apar sub anumite conditii.<br />

Evenimente ce apar la fiecare cerere<br />

Application_Beg<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>Request() : apelata la startul fiecarei cereri.<br />

Application_AuthenticateRequest() : apelata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te de autentificare.<br />

Application_AuthorizeRequest() : apelata dupa ce utilizatorul a fost autentificat, e<br />

momentul de a verifica drepturile urilizatorului. Se pot atribui privilegii speciale <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aceasta<br />

etapa.<br />

Application_ResolveRequestCache() : folosita impreuna cu cache. Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a se ia d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

cache fara a executa alt cod.<br />

Application_AquireRequestState() : apelata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tea determ<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>arii <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatiilor<br />

despre sesiune si folosita pentru a popula colectia Session.<br />

Application_PreRequestHandlerExecute() : apelata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te ca HTTP sa execute cererea.<br />

Application_ReleaseRequestState() : apelata cand <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatia specifica despre sesiune<br />

este pe cale de a fi serializata d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> colectia Session astfel <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>cat aceasta este disponibila pentru noua<br />

cerere.<br />

Application_UpdateRequestCache() : apelata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te ca <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatia sa fie adaugata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

cache.<br />

Application_EndRequest() : apelata la sfarsitul cererii dar <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te ca obiectele sa fie<br />

elim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ate. Loc bun pentru codul de curartare.<br />

Evenimente ce nu se lanseaza la fiecare cerere<br />

Application_Start(): start aplicatie. Se poate scrie cod pentru <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itializare.<br />

Session_Start(): start o noua sesiune. Initializare <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatii specifice utilizatorului.<br />

Application_Er<strong>ro</strong>r(): cand apare o e<strong>ro</strong>are <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aplicatie.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 7/30<br />

Session_End(): la term<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>area sesiunii unui client. Se apeleaza numai daca folosim o sesiune<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>-p<strong>ro</strong>ces (mod InP<strong>ro</strong>c). Cod pentru curatare.<br />

Application_End(): apelata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te ca aplicatia sa se term<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e.<br />

Application_Disposed(): Se poate verifica daca resursele critice au fost eliberate. Ceea ce<br />

t<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> general de cod unmanaged.<br />

Configurare <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Se realizeaza pr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>termediul fisierelor XML.<br />

Acestea nu sunt niciodata blocate si sunt usor de accesat si replicat (cu existenta drepturilor<br />

necesare).<br />

Fisierul mach<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e.config<br />

Se gaseste <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> directorul C:\w<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dows\Mic<strong>ro</strong>soft.Net\Framework\”versiune_net”\Config.<br />

Este b<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e comentat si poate fi folosit pentru crearea unui fisier de configurare p<strong>ro</strong>priu.<br />

Fisierul web.config<br />

Fiecare aplicatie web mosteneste setari d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mach<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e.config si fisierul web.config d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> radac<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<br />

directorului virtual.<br />

Scheletul de baza al fisierului web.config este:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

In <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 3.5 s-au adaugat sectiuni noi la fisierul de configurare.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 8/30<br />

Modelul Event <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

Acest model descrie modul de tratare al evenimentelor diverselor cont<strong>ro</strong>ale cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ute <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

. Adaugam cont<strong>ro</strong>ale la formularul web si apoi decidem ce evenimente sa tratam.<br />

Observatie<br />

Modelul este asemanator cu cel dat de W<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dows Forms, dar lucreaza diferit. Numarul<br />

evenimentelor implementate de cont<strong>ro</strong>ale este redus <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> comparatie cu W<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dows Forms.<br />

1. Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a ruleaza pentru prima data.<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> creaza pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a si cont<strong>ro</strong>alele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a, executa codul de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itializare si apoi<br />

pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este returnata clientului. Obiectul Page si cont<strong>ro</strong>alele ce le cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e sunt elim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ate<br />

d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> memorie (sunt distruse).<br />

2. Clientul executa actiuni asupra pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii (completare cont<strong>ro</strong>ale d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a, etc.) ce au<br />

ca efect un postback. Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este trimisa cu toate datele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> form catre server.<br />

3. <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tercepteaza pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a returnata si recreaza obiectele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a la starea pe<br />

care au avut-o ultima data.<br />

4. <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> verifica c<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e a generat postback si apeleaza metoda corespunzatoare acelui<br />

eveniment (de ex. clic pe un buton). In acest moment se executa cod pe server (actualizare<br />

baze de date, etc.) si apoi se modifica obiectele cont<strong>ro</strong>alelor pentru a reflecta noua<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatie.<br />

5. Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este transformata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> HTML, trimisa clientului si apoi distrusa d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> server.<br />

Daca pe aceeasi pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a apare un nou postback se reia ciclul de la psul 2.<br />

Postback automat<br />

In <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> actiunile le genereaza clientul si serverul p<strong>ro</strong>ceseaza codul<br />

corespunzator. Anumite evenimente cum ar fi miscarea mouse-ului nu sunt tratate implicit.<br />

Nu mai exista acea bucla de mesaje ce caracterizeaza o aplicatie W<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dow.<br />

Evenimentele sunt regenerate pe partea de server numai dupa ce s-a facut un postback al<br />

pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii.<br />

Exista cont<strong>ro</strong>ale ce au posibilitatea de a face postback automat, acest lucru <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>semnand ca la<br />

generarea unui eveniment al cont<strong>ro</strong>lului, cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>utul pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii este trims catre server.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le trebuie sa aiba setata p<strong>ro</strong>prietatea<br />

AutoPostBack = true<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 9/30<br />

Care e mecanismul AutoPostback<br />

Cand AutoPostBack = true, <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> foloseste un cod <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> JavaScript pentru a realiza<br />

legatura d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tre client si server.<br />

Functia d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> JavaScript se numeste __doPostBack() ce foloseste doua campuri ascunse pentru<br />

a transmite parametrii:<br />

<br />

<br />

Codul <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> JavaScript (generat de <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>) este urmatorul:<br />

<br />

<br />

<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le ce au AutoPostBack = true vor apela metoda __doPostBack() folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d<br />

atributele “onclick” sau “onchange”.<br />

Observatie<br />

In descrierea d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> HTML, onclick si onchange apar ca atribute.<br />

Pe partea de cont<strong>ro</strong>l (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> codul C# scris pentru pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a) acestea sunt evenimente expuse de<br />

cont<strong>ro</strong>l.<br />

<br />

<br />

View State<br />

De fiecare data cand o pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este trimisa catre server, acesta recreaza obiectele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<br />

porn<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d de la def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itia acesteia, def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itie data <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> fisierul .aspx.<br />

Eventualele modificari ale p<strong>ro</strong>prietatilor cont<strong>ro</strong>alelor sunt luate d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un camp “ascuns” ce<br />

pastreaza ultima stare a pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii. Aceasta <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatie constituie ceea ce numeste “view state”<br />

pentru pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a. Informatiile sunt pastrate sub forma de perechi cheie/valoare.<br />

P<strong>ro</strong>prietatea <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cauza este: EnableViewState = {true, false}.<br />

Observatie<br />

Chiar daca EnableViewState=false, sistemul cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ua sa ment<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a anumite <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatii<br />

despre pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 10/30<br />

Conformitate cu XHTML<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> sunt conforme cu standardul XHTML 1.1.<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> reda cont<strong>ro</strong>alele folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d marcaj conform cu XHTML, adica sunt respectate<br />

urmatoarele reguli:<br />

Tag si numele atributelor trebuie sa fie “lowercase”.<br />

Toate elementele trebuiesc <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>chise ().<br />

Toate valorile atributelor trebuie sa fie furnizate <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tre ghilimele (runat="server").<br />

Trebuie folosit id pentru attribute si nu name.<br />

XHTML nu suporta frame si formatare fara CSS.<br />

Urmatoarele cont<strong>ro</strong>ale <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> pot folosi atributul target:<br />

AdRotator<br />

TreeNode<br />

HyperL<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>k<br />

HyperL<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>kColumn<br />

BulletedList<br />

Def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itia tipului de document<br />

Fiecare tip de document XHTML <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>cepe cu un doctype ce def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>este tipul de XHTML ce va fi<br />

folosit.<br />

In pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a web <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>, doctype trebuie plasat imediat dupa directiva Page, <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> portiunea de<br />

marcare a pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii web.<br />

<br />

<br />

<br />

<br />

Untitled Page<br />

<br />

<br />

<br />

<br />

...<br />

<br />

<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 11/30<br />

Etapele p<strong>ro</strong>cesarii formelor web<br />

Etapele <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> tratarea unei pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>i (cereri) sunt:<br />

1. Cerere client.<br />

2. Initializare pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> framework.<br />

3. Executie cod <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>itializare.<br />

4. Validare.<br />

5. Tratare evenimente.<br />

6. Raspuns catre client.<br />

7. Stergere obiecte d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> server (Cleanup).<br />

Initializare pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> framework<br />

Evenimentul Page.Init - metoda Page_Init.<br />

Initializare cod utilizator<br />

Eveniment Page.Load – metoda Page_Load.<br />

P<strong>ro</strong>prietatea IsPostBack furnizeaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatii despre faptul ca pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este prima data<br />

accesata sau nu.<br />

P<strong>ro</strong>prietatea IsPostBack = false, la prima cerere a pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii.<br />

if (!IsPostBack)<br />

{<br />

// Initializare cont<strong>ro</strong>ale la prima tratare a pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii<br />

FirstName.Text = "Enter your name here";<br />

}<br />

Validare pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<br />

P<strong>ro</strong>prietatea Page.IsValid.<br />

Tratare evenimente<br />

In acest moment pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este complet <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>carcata si validata.<br />

Evenimentele <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> sunt :<br />

Evenimente cu raspuns imediat : clic pe un buton, imag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e, l<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>k, etc.<br />

Evenimente de tip Change : schimbare selectie <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un cont<strong>ro</strong>l sau text <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un<br />

TextBox. Trebuie sa avem declarat AutoPostBack = true.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 12/30<br />

Asociere data<br />

Cand folosim cont<strong>ro</strong>ale pentru surse de date, <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> executa automat update si cereri<br />

asupra sursei de date ca parte a ciclului de viata al pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii.<br />

Modificarile (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>sert, update, delete) sunt executate dupa executia tutu<strong>ro</strong>r evenimentelor dar<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>te de evenimentul Page.PreRender.<br />

Dupa emiterea evenimentului Page.PreRender cont<strong>ro</strong>alele surse de date executa cererile si<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>sereaza datele <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cont<strong>ro</strong>alele ce folosesc sursa de date.<br />

Cleanup<br />

Eveniment Page.Dispose.<br />

Exemplificare ord<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e de tratare a evenimentelor unei pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>i<br />

<br />

<br />

<br />

Page Flow<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

In etapa urmatoare adaugam metode pentru evenimentele urmatoare:<br />

Page.Init, Page.Load, Page.PreRender, Page.Unload, si Button.Click.<br />

private void Page_Load(object sender, System.EventArgs e)<br />

{<br />

lblInfo.Text += "Page.Load event handled.";<br />

if (Page.IsPostBack)<br />

{<br />

lblInfo.Text +=<br />

"This is not the first time you've seen this page.";<br />

}<br />

}<br />

private void Page_Init(object sender, System.EventArgs e)<br />

{<br />

lblInfo.Text += "Page.Init event handled.";<br />

}<br />

private void Page_PreRender(object sender, System.EventArgs e)<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 13/30<br />

{<br />

}<br />

lblInfo.Text += "Page.PreRender event handled.";<br />

private void Page_Unload(object sender, System.EventArgs e)<br />

{<br />

// This text never appears because the HTML is already<br />

// rendered for the page at this po<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>t.<br />

lblInfo.Text += "Page.Unload event handled.";<br />

}<br />

Codul pentru evenimentul click al butonului:<br />

p<strong>ro</strong>tected void Button1_Click(object sender, System.EventArgs e)<br />

{<br />

lblInfo.Text += "Button1.Click event handled.";<br />

}<br />

Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este un conta<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>er pentru cont<strong>ro</strong>alele pe care le cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e. Putem vizualiza cont<strong>ro</strong>alele<br />

d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d urmatorul cod (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> Page_Load):<br />

foreach (Cont<strong>ro</strong>l cont<strong>ro</strong>l <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> Page.Cont<strong>ro</strong>ls)<br />

{<br />

Response.Write(cont<strong>ro</strong>l.GetType().ToStr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g() + " - " +<br />

cont<strong>ro</strong>l.ID + "");<br />

}<br />

Response.Write("");<br />

Clasa Page<br />

Observatie<br />

Toate formularele web sunt <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>stante ale clasei Page.<br />

Cateva p<strong>ro</strong>prietati importante ale acestei clase:<br />

Session<br />

Application<br />

Cache<br />

Request ; Request.QueryStr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g["id"] ;<br />

Response ; Response.Write() ; Response.Redirect("page.aspx") ;<br />

Response.Redirect(http://...)<br />

Server ; Server.Transfer() ; HtmlEncode ; HtmlDecode ;<br />

UrlEncode ; UrlDecode ; MapPath ;<br />

User<br />

Trace<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 14/30<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> server<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le server sunt clase <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> .<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> Framework ce reprez<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ta elemente vizuale pe un<br />

formular web.<br />

Tipuri de cont<strong>ro</strong>ale server<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> server HTML: clase ce implementeaza elementele standard HTML. Pentru a<br />

schimba un element ord<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ar HTML <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un cont<strong>ro</strong>l server trebuie adaugat atributul<br />

runat="server".<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>: sunt ca si HTML dar mai usor de folosit.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> avansate: au posibilitatea de a genera mult mai mult markup HTML.<br />

Exemple: cont<strong>ro</strong>alele Calendar, AdRotator si TreeView.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> de validare: folosite <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> validarea datelor d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> alte cont<strong>ro</strong>ale d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cadrul pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> pentru date: afiseaza o cantitate mare de date (grid, list). Suporta template,<br />

editare, sortare si pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>are.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> de navigare: navigare de la o pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a la alta.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> Log<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>: pentru autentificare la o baza de date.<br />

Ierarhia cont<strong>ro</strong>alelor d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> server<br />

Toate cont<strong>ro</strong>alele server sunt derivate d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> clasa Cont<strong>ro</strong>l aflata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> System.<st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>.UI.<br />

P<strong>ro</strong>prietati importante ale clasei Cont<strong>ro</strong>l<br />

ClientID<br />

- returneaza identificatorul clientului, identificator creat de <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>.<br />

Cont<strong>ro</strong>ls – returneaza colectia de cont<strong>ro</strong>ale descendente. Colectia Page.Cont<strong>ro</strong>ls<br />

cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e cont<strong>ro</strong>alele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a.<br />

EnableViewState - cont<strong>ro</strong>lul isi memoreaza starea<br />

ID – ID cont<strong>ro</strong>l<br />

Page – returneaza o refer<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ta la obiectul pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a ce cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e cont<strong>ro</strong>lul.<br />

Parent – returneaza o refer<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ta la par<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tele cont<strong>ro</strong>lului.<br />

Visible : bool (true, false).<br />

DataB<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d() Asociaza cont<strong>ro</strong>lul si toate cont<strong>ro</strong>alele descendente la sursa de date specificata.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 15/30<br />

F<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dCont<strong>ro</strong>l() – cauta cont<strong>ro</strong>l dupa nume.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng><br />

Clasa de baza <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Cont<strong>ro</strong>l derivate d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> Cont<strong>ro</strong>l.<br />

P<strong>ro</strong>prietati importante<br />

AccessKey<br />

BackColor -<br />

BorderColor -<br />

BorderStyle - Dashed, Dotted, Double, G<strong>ro</strong>ove, Ridge, Inset, Outset, Solid, None.<br />

BorderWidth<br />

CssClass<br />

Enabled<br />

Clasele de baza ale cont<strong>ro</strong>lelor web<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

<br />

HTML si p<strong>ro</strong>prietati<br />

or<br />

<br />

Text, CausesValidation, PostBackUrl,<br />

ValidationG<strong>ro</strong>up.<br />

Event Click.<br />

<br />

<br />

AutoPostBack, Checked, Text,<br />

TextAlign.<br />

Event CheckedChanged.<br />

<br />

<br />

FileBytes, FileContent, FileName,<br />

HasFile, PostedFile, SaveAs()<br />

<br />

<br />

Value<br />

<br />

...<br />

ImageUrl, NavigateUrl, Target, Text<br />

<br />

<br />

AlternateText, ImageAlign, ImageUrl<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 16/30<br />

CausesValidation, ValidationG<strong>ro</strong>up.<br />

Event Click.<br />

<br />

<br />

HotSpotMode, HotSpots (collection),<br />

AlternateText, ImageAlign, ImageUrl<br />

<br />

...<br />

Text, AssociatedCont<strong>ro</strong>lID<br />

<br />

<br />

Text, CausesValidation, Validation-<br />

G<strong>ro</strong>up, Click event<br />

<br />

...<br />

BackImageUrl, DefaultButton,<br />

G<strong>ro</strong>up<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gText, HorizontalAlign,<br />

Sc<strong>ro</strong>llbars, Wrap<br />

<br />

<br />

AutoPostBack, Checked, G<strong>ro</strong>upName,<br />

Text, TextAlign, CheckedChanged event<br />

<br />

...<br />

BackImageUrl, CellPadd<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g,<br />

CellSpac<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g, GridL<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>es,<br />

HorizontalAlign, Rows (collection)<br />

<br />

...<br />

ColumnSpan, HorizontalAlign,<br />

RowSpan, Text, VerticalAlign, Wrap<br />

<br />

...<br />

Cells (collection), HorizontalAlign,<br />

VerticalAlign<br />

<br />

sau<br />

...<br />

AutoPostBack, Columns, MaxLength,<br />

ReadOnly, Rows, Text, TextMode, Wrap.<br />

Event TextChanged.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 17/30<br />

Exemplu<br />

<br />

Unitati de masura<br />

px – pixeli<br />

% - p<strong>ro</strong>cent d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a afisata<br />

Exemplu declarare <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a:<br />

<br />

iar d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod:<br />

// Convert the number 300 to a Unit object<br />

// represent<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g pixels, and assign it.<br />

pnl.Height = Unit.Pixel(300);<br />

// Convert the number 50 to a Unit object<br />

// represent<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g percent, and assign it.<br />

pnl.Width = Unit.Percentage(50);<br />

Enumerari<br />

In cod se foloseste s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>taxa C# (BorderStyle.Dashed) iar <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aspx nu se <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>clude numele<br />

enumerarii:<br />

<br />

Culori<br />

In cod enumerarea Color.<br />

In aspx numele culorii.<br />

//C#<br />

ctrl.ForeColor = Color.Red;<br />

//<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng><br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 18/30<br />

Focus<br />

DefaultFocus<br />

<br />

Focusul se realizeaza cu ajutorul unei metode JavaScript, <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Form.AutoFocus().<br />

Metoda este furnizata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mod automat de <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>.<br />

Codul d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> aceasta metoda urmareste ideea de mai jos:<br />

function <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Form_AutoFocus(focusId) {<br />

// F<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d the element based on the ID (code differs based on b<strong>ro</strong>wser).<br />

var targetCont<strong>ro</strong>l;<br />

if (__nonMSDOMB<strong>ro</strong>wser) {<br />

targetCont<strong>ro</strong>l = document.getElementById(focusId);<br />

}<br />

else {<br />

targetCont<strong>ro</strong>l = document.all[focusId];<br />

}<br />

// Check if the cont<strong>ro</strong>l can accept focus or<br />

// conta<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>s a child that can.<br />

var focused = targetCont<strong>ro</strong>l;<br />

if (targetCont<strong>ro</strong>l != null && (!<st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Form_CanFocus(targetCont<strong>ro</strong>l)) ) {<br />

focused = <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Form_F<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dFirstFocusableChild(targetCont<strong>ro</strong>l);<br />

}<br />

}<br />

// If there is a valid cont<strong>ro</strong>l, try to apply focus and sc<strong>ro</strong>ll<br />

// it <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>to view.<br />

if (focused != null) {<br />

try {<br />

focused.focus();<br />

focused.sc<strong>ro</strong>llIntoView();<br />

if (w<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dow.__smartNav != null) {<br />

w<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dow.__smartNav.ae = focused.id;<br />

}<br />

}<br />

catch (e) {<br />

}<br />

}<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 19/30<br />

Butonul implicit<br />

Butonul implicit executa metoda atasata evenimentului “click” cand s-a apasat tasta Enter.<br />

Este la nivel de pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a web, iar <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cadrul pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii poate fi la nivel de Panel.<br />

In se foloseste p<strong>ro</strong>prietatea DefaultButton <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> care se specifica ID cont<strong>ro</strong>lului.<br />

<br />

Butonul implicit trebuie sa fie un cont<strong>ro</strong>l ce implementeaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>terfata IButtonCont<strong>ro</strong>l.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le web Button, L<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>kButton si ImageButton implementeaza aceasta<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>terfata.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le server HTML nu implementeaza IButtonCont<strong>ro</strong>l.<br />

Panel cu bare de navigare (sc<strong>ro</strong>ll)<br />

Cont<strong>ro</strong>lul Panel are posibilitatea de sc<strong>ro</strong>ll.<br />

Se foloseste p<strong>ro</strong>prietatea Sc<strong>ro</strong>llBars = {Vertical, Horizontal, Both, Auto}.<br />

<br />

This sc<strong>ro</strong>lls.<br />

<br />

<br />

<br />

<br />

...<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 20/30<br />

Evenimentul click si butonul ImageButton<br />

Evenimentul click pe acest buton trimite <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> al doilea parametru un obiect<br />

ImageClickEventArgs ce are p<strong>ro</strong>prietatile X si Y (coordonatele unde s-a facut clic pe<br />

imag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e). Se pot identifica astfel puncte de pe o harta si sa se execute un cod specific zonei.<br />

p<strong>ro</strong>tected void ImageButton1_Click(object sender,<br />

System.<st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>.UI.ImageClickEventArgs e)<br />

{<br />

lblResult.Text = "You clicked at (" + e.X.ToStr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g() +<br />

", " + e.Y.ToStr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g() + "). ";<br />

// Check if the clicked po<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>t falls <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the rectangle described<br />

// by the po<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ts (20,20) and (275,100), which is the button surface.<br />

}<br />

if ((e.Y < 100) && (e.Y > 20) && (e.X > 20) && (e.X < 275))<br />

{<br />

lblResult.Text += "You clicked on the button surface.";<br />

}<br />

else<br />

{<br />

lblResult.Text += "You clicked the button border.";<br />

}<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le List<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> ce au ca articole o colectie de obiecte (ListBox, D<strong>ro</strong>pDownList, GridView,<br />

etc.).<br />

cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e o colectie de obiecte .<br />

In HTML, tag cu atributul size="1".<br />

cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e o colectie de obiecte .<br />

In HTML, tag cu atributul size="x" unde x este numarul de articole<br />

vizibile.<br />

- al<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>iate <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o tabela.<br />

<br />

o lista statica ordonata sau nu.<br />

In HTML, tag sau .<br />

Se poate folosi si pentru a crea o lista de hyperl<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>k-uri.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 21/30<br />

Membri<br />

AutoPostBack = true => actioneaza la schimbarea selectiei curente.<br />

Items – returneaza o colectie de articole ListItem.<br />

SelectedIndex – returneaza sau seteaza <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dexul articolului selectat. Pentru liste ce suporta<br />

selectia multipla trebuie scanata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>treaga colectie pentru a determ<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a articolele selectate<br />

(verificare p<strong>ro</strong>prietate Selected).<br />

SelectedItem – returneaza o refer<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ta la prmul articol ListItem selectat.<br />

DataSource - se seteaza la un obiect ce cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatii pe care dorim sa le afisam<br />

(DataSet, DataTable sau colectii).<br />

Cand se apeleaza DataB<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d() lista va fi completata cu obiecte d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> acea colectie.<br />

DataMember – se foloseste impreuna cu asocierea de date, cand sursa de date cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e mai<br />

mult de o tabela. DataMember <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dica ce tabela se va folosi.<br />

DataTextField – <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dica ce p<strong>ro</strong>prietate sau camp d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> sursa de date va fi folosit ca text<br />

pentru articol.<br />

DataValueField – <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dica ce p<strong>ro</strong>prietate sau camp va fi folosit ca valoare pentru articol (nu e afisat<br />

dar poate fi citit <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod).<br />

DataTextFormatStr<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g – seteaza formatarea str<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gului folosit pentru redarea articolului.<br />

Eveniment: SelectedIndexChanged – la schimbarea selectiei.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le de tip List selectabile sunt:<br />

D<strong>ro</strong>pDownList<br />

ListBox<br />

CheckBoxList<br />

RadioButtonList.<br />

Exemplu<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 22/30<br />

Alte p<strong>ro</strong>prietati importante pentru CheckBoxList si RadioButtonList<br />

RepeatLayout - cont<strong>ro</strong>alele vor fi aranjate <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o tablela (implicit) sau <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>l<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e.<br />

Valori posibile: Table sau Flow.<br />

RepeatDirection = {Horizontal, Vertical}<br />

RepeatColumns - numarul de coloane cand RepeatLayout=Table.<br />

CellPadd<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g, CellSpac<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g, TextAlign folosite cand RepeatLayout=Table.<br />

Exemplu<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

Option 1<br />

Option 2<br />

<br />

<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 23/30<br />

Cont<strong>ro</strong>lul BulletedList<br />

Este echivalent cu sau .<br />

Articolele se ataseaza la cont<strong>ro</strong>l folos<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>d p<strong>ro</strong>prietatea Items.<br />

P<strong>ro</strong>prietati<br />

BulletStyle – determ<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a stilul de marcare al listei.<br />

Valori posibile:<br />

Numbered, LowerAlpha, UpperAlpha, LowerRoman, UpperRoman, Disc, Circle,<br />

Square, CustomImage (caz <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> care trebuie setata p<strong>ro</strong>prietatea BulletImageUrl).<br />

BulletImageUrl -<br />

FirstBulletNumber – seteaza prima valoare d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> lista (cu care se <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>cepe marcarea<br />

elementelor).<br />

DisplayMode : {Text, L<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>kButton – eveniment clic, HyperL<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>k – textul este un URL}.<br />

Exemplu. Codul pentru tratarea evenimentului clic e scris <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a.<br />

<br />

<br />

<br />

p<strong>ro</strong>tected void BulletedList1_Click(object sender,<br />

BulletedListEventArgs e)<br />

{<br />

if (e.Index ==0)<br />

{<br />

Image1.ImageUrl = "~/images/audi.png";<br />

}<br />

if (e.Index ==1)<br />

{<br />

Image1.ImageUrl = "~/images/bmw.png";<br />

}<br />

}<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Click the name to see the user&#39;s photo<br />

<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 24/30<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> pentru validarea <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>trarilor<br />

Validarea se realizeaza atat pe partea de client cat si pe partea de server.<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng>le de validare se declara <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> si sunt atasate cont<strong>ro</strong>alelor de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>trare. In acest<br />

mod nu mai e necesar sa scriem cod pentru validare atat pe partea de client cat si pe cea de<br />

server.<br />

Daca p<strong>ro</strong>cesul de validare nu este trecut cu succes, pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a nu este trimisa serverului sau nu<br />

este retransmisa clientului.<br />

- cont<strong>ro</strong>lul nu trebuie sa fie vid cand pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a este trimisa<br />

serverului.<br />

- cont<strong>ro</strong>leaza daca valorile asociate cont<strong>ro</strong>lului sunt <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tervalul<br />

specificat.<br />

- cont<strong>ro</strong>leaza daca valoarea asociata cont<strong>ro</strong>lului se potriveste cu<br />

comparatia specificata – mai mare, mai mic, etc - valoare d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> alt cont<strong>ro</strong>l sau o constanta.<br />

- cont<strong>ro</strong>leaza daca valoarea specificata se potriveste cu<br />

expresia regulata specificata.<br />

- validator personalizat. Cod JavaScript pe partea de client, cod C#<br />

pe partea de server.<br />

- arata o s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>teza a e<strong>ro</strong>rilor pentru fiecare camp.<br />

Observatie: Se pot folosi mai multi validatori pentru acelasi camp.<br />

P<strong>ro</strong>prietatea RequiredFieldvalidator. RangeValidator, CompareValidator si<br />

RegularExpressionValidator nu verifica daca cont<strong>ro</strong>lul este vid si vor returna succes <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> acest<br />

caz. RequiredFieldValidator rezolva p<strong>ro</strong>blema.<br />

Pentru cont<strong>ro</strong>alele de tip lista, p<strong>ro</strong>prietatea ce se valideaza este Value, care nu e afisata <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

b<strong>ro</strong>wser. Va trebui sa folosim atributul Value pentru validare.<br />

Cand p<strong>ro</strong>iectam un cont<strong>ro</strong>l web derivat d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Cont<strong>ro</strong>l putem specifica p<strong>ro</strong>prietatea ce va fi<br />

validata.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 25/30<br />

[ValidationP<strong>ro</strong>perty("Text")]<br />

public class FancyTextBox : <st<strong>ro</strong>ng>Web</st<strong>ro</strong>ng>Cont<strong>ro</strong>l<br />

{...}<br />

P<strong>ro</strong>cesul de validare<br />

P<strong>ro</strong>prietatea CausesValidation = {true, false}.<br />

Se poate folosi validarea cont<strong>ro</strong>alelor pentru a verifica o pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mod automat cand aceasta<br />

este trimisa la server sau manual <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod.<br />

Validarea automata presupune folosirea p<strong>ro</strong>prietatii CausesValidation pentru cont<strong>ro</strong>ale.<br />

Daca CausesValidation = false atunci <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> va ignora validarea cont<strong>ro</strong>alelor,<br />

pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a va fi returnata si codul de tratare al evenimentelor va rula normal.<br />

Daca CausesValidation = true (valoare implicita), <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> va valida <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> mod automat<br />

pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a, se valideaza fiecare cont<strong>ro</strong>l d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a si daca o validare nu se executa cu succes<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> va returna pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a cu <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>formatii despre e<strong>ro</strong>ri (e<strong>ro</strong>are).<br />

Clasa BaseValidator<br />

Membri<br />

Cont<strong>ro</strong>lToValidate – <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dica cont<strong>ro</strong>lul ce va fi validatt.<br />

Display = {Static, Dynamic} – <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dica modul cum va fi afisata e<strong>ro</strong>area.<br />

EnableClientScript = {true, false} – daca este validare pe partea de client sau nu. True<br />

implicit.<br />

Enabled = {true, false} – enable / disable validare.<br />

Er<strong>ro</strong>rMessage – mesajul de e<strong>ro</strong>are afisat de ValidationSummary.<br />

Text – textul e<strong>ro</strong>rii afisat cont<strong>ro</strong>lul de validare.<br />

IsValid – determ<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a daca valoarea asociata cont<strong>ro</strong>lului de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>trare este valida sau nu. Poate fi<br />

realizata pe partea de client si pe partea de server.<br />

Observatie<br />

Putem verifica p<strong>ro</strong>prietatea Page.IsValid pentru a sti daca toate cont<strong>ro</strong>alele de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>trare d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng><br />

pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a sunt valide.<br />

SetFocusOnEr<strong>ro</strong>r - focus mutat pe campul ce cont<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e e<strong>ro</strong>area. Regula: primul cont<strong>ro</strong>l setat,<br />

primul luat <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> considerare.<br />

ValidationG<strong>ro</strong>up – validare pentru anumite cont<strong>ro</strong>ale grupate.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 26/30<br />

Validate() – metoda revalideaza cont<strong>ro</strong>alele si actualizeaza p<strong>ro</strong>prietatea IsValid.<br />

Cont<strong>ro</strong>lul RequiredFieldValidator<br />

<br />

*<br />

<br />

Se va afisa * daca TextBox-ul este vid.<br />

Cont<strong>ro</strong>lul RangeValidator<br />

<br />

*<br />

<br />

Cont<strong>ro</strong>lul CompareValidator<br />

<br />

*<br />

<br />

sau<br />

<br />

<br />

<br />

<br />

<br />

Cont<strong>ro</strong>lul RegularExpressionValidator<br />

<br />

*<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 27/30<br />

Memento<br />

Character Escapes Description<br />

Ord<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ary characters Characters other than .$^{[(|)*+\ match themselves.<br />

\b Matches a backspace.<br />

\t Matches a tab.<br />

\r Matches a carriage return.<br />

\v Matches a vertical tab.<br />

\f Matches a form feed.<br />

\n Matches a newl<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e.<br />

\ If followed by a special character (one of .$^{[(|)*+\), this character<br />

escape matches that character literal. For example, \+ matches the +<br />

character.<br />

Character Class Description<br />

. Matches any character except \n.<br />

[aeiou] Matches any s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gle character specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the set.<br />

[^aeiou] Matches any character not specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the set.<br />

[3-7a-dA-D] Matches any character specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the specified ranges (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the<br />

example the ranges are 3–7, a–d, A–D).<br />

\w Matches any word character; that is, any alphanumeric character or the<br />

underscore (_).<br />

\W Matches any nonword character.<br />

\s Matches any whitespace character (space, tab, form feed, newl<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e,<br />

carriagereturn, or vertical feed).<br />

\S Matches any nonwhitespace character.<br />

\d Matches any decimal character.<br />

\D Matches any nondecimal character.<br />

Us<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g more advanced syntax, you can specify that a certa<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> character or<br />

class of characters must be present at least once, or between two and six<br />

times, and so on. The quantifiers are placed just after a character or a<br />

range of characters and allow you to specify how many times the preced<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g<br />

character must be matched (see Table 4-19).<br />

Character Class Description<br />

. Matches any character except \n.<br />

[aeiou] Matches any s<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gle character specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the set.<br />

[^aeiou] Matches any character not specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the set.<br />

[3-7a-dA-D] Matches any character specified <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the specified ranges (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> the<br />

example the ranges are 3–7, a–d, A–D).<br />

\w Matches any word character; that is, any alphanumeric character or the<br />

underscore (_).<br />

\W Matches any nonword character.<br />

\s Matches any whitespace character (space, tab, form feed, newl<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e,<br />

carriage return, or vertical feed).<br />

\S Matches any nonwhitespace character.<br />

\d Matches any decimal character.<br />

\D Matches any nondecimal character.<br />

Quantifier Description<br />

* Ze<strong>ro</strong> or more matches<br />

+ One or more matches<br />

Ze<strong>ro</strong> or one matches<br />

{N} N matches<br />

{N,} N or more matches<br />

{N,M} Between N and M matches (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>clusive)<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 28/30<br />

Cont<strong>ro</strong>lul CustomValidator<br />

Pe partea de client<br />

<br />

function EmpIDClientValidate(ctl, args)<br />

{<br />

// the value is a multiple of 5 if the modulus by 5 is 0<br />

args.IsValid=(args.Value%5 == 0);<br />

}<br />

<br />

Pe partea de server, eveniment CustomValidator.ServerValidate:<br />

p<strong>ro</strong>tected void EmpIDServerValidate(object sender,<br />

ServerValidateEventArgs args)<br />

{<br />

try<br />

{<br />

args.IsValid = (<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>t.Parse(args.Value)%5 == 0);<br />

}<br />

catch<br />

{<br />

// An er<strong>ro</strong>r is most likely caused by non-numeric data.<br />

args.IsValid = false;<br />

}<br />

}<br />

Pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a .aspx<br />

<br />

*<br />

<br />

Cont<strong>ro</strong>lul ValidationSummary<br />

Nu executa actiuni de validare ci prez<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ta un rezumat al e<strong>ro</strong>rilor aparute <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> p<strong>ro</strong>cesul de<br />

validare.<br />

Daca p<strong>ro</strong>prietatea ShowMessageBox = true rezumatul e<strong>ro</strong>rilor este afisat pe partea de client<br />

<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-o caseta de dialog JavaScript sau pe pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a daca ShowSummary = true, atentie mai<br />

trebuie setata p<strong>ro</strong>prietatea DisplayMode <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> acest d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> urma caz.<br />

DisplyMode = {S<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>gleParagraph, List, BulletList}.<br />

<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 29/30<br />

Folosirea validarilor <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod<br />

Pentru a accesa validatorii <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> cod, trebuie iterata colectia Validators a pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ii curente.<br />

p<strong>ro</strong>tected void Options_Changed(object sender, System.EventArgs e)<br />

{<br />

// Exam<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>e all the validators on the back.<br />

foreach (BaseValidator validator <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> Page.Validators)<br />

{<br />

// Turn the validators on or off, depend<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g on the value<br />

// of the "Validators enabled" check box (chkEnableValidators).<br />

validator.Enabled = chkEnableValidators.Checked;<br />

// Turn client-side validation on or off, depend<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g on the<br />

// value of the "Client-side validation enabled" check box<br />

// (chkEnableClientSide).<br />

validator.EnableClientScript = chkEnableClientSide.Checked;<br />

}<br />

// Configure the validation summary based on the f<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>al<br />

// two check boxes.<br />

}<br />

Summary.ShowMessageBox = chkShowMsgBox.Checked;<br />

Summary.ShowSummary = chkShowSummary.Checked;<br />

Exemplu cu folosirea metodei Validate().<br />

Ideea este de a adauga un buton cu CausesValidation=false.<br />

Cand se face clic pe buton se valideaza pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a manual sau se apeleaza metoda Validate() si<br />

se verifica prprietatea IsValid.<br />

p<strong>ro</strong>tected void cmdOK_Click(Object sender, EventArgs e)<br />

{<br />

// Validate the page.<br />

this.Validate();<br />

if (!this.IsValid)<br />

{<br />

str<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>g er<strong>ro</strong>rMessage = "Mistakes found:";<br />

// Create a variable to represent the <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>put cont<strong>ro</strong>l.<br />

TextBox ctrlInput;<br />

// Search th<strong>ro</strong>ugh the validation cont<strong>ro</strong>ls.<br />

}<br />

foreach (BaseValidator ctrl <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> this.Validators)<br />

{<br />

if (!ctrl.IsValid)<br />

{<br />

er<strong>ro</strong>rMessage += ctrl.Er<strong>ro</strong>rMessage + "";<br />

ctrlInput = (TextBox)this.F<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>dCont<strong>ro</strong>l(ctrl.Cont<strong>ro</strong>lToValidate);<br />

er<strong>ro</strong>rMessage += " * P<strong>ro</strong>blem is with this <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>put: ";<br />

er<strong>ro</strong>rMessage += ctrlInput.Text + "";<br />

}<br />

}<br />

lblMessage.Text = er<strong>ro</strong>rMessage;<br />

}<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei


<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> 03.03.2014 30/30<br />

<st<strong>ro</strong>ng>Cont<strong>ro</strong>ale</st<strong>ro</strong>ng> avansate<br />

Elemente complexe de <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>terfata; sunt cont<strong>ro</strong>ale complet diferite de cele d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> HTML.<br />

<st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>clude nume<strong>ro</strong>ase cont<strong>ro</strong>ale avansate cum ar fi : cont<strong>ro</strong>ale de tip lista, de navigare,<br />

de securitate si cont<strong>ro</strong>ale pentru portaluri web.<br />

Urmatoarele cont<strong>ro</strong>ale nu <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tra <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> nici una d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> categoriile de mai sus.<br />

AdRotator: afiseaza bannere def<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>ite <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tr-un fisier XML.<br />

Calendar: selectie data calendaristica.<br />

MultiView, View, si Wizard: lucreaza asemanator ca Panel si permit comutarea <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>tre<br />

grupurile de cont<strong>ro</strong>ale d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> pag<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>a.<br />

Substitution: este un placeholder ce permite personalizarea output-ului d<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> <st<strong>ro</strong>ng>ASP</st<strong>ro</strong>ng>.<st<strong>ro</strong>ng>NET</st<strong>ro</strong>ng>.<br />

Xml: are ca <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>trare un fisier XML si un fisier de stiluri XSLT si afiseaza rezultatul <st<strong>ro</strong>ng>in</st<strong>ro</strong>ng> b<strong>ro</strong>wser.<br />

Ioan Asim<st<strong>ro</strong>ng>in</st<strong>ro</strong>ng>oaei

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!