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
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: <br />
<br />
<br />
Enter your last name: <br />
<br />
<br />
<br />
You p<strong>ro</strong>gram with:<br />
<br />
<br />
C#<br />
<br />
<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'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