Sunteți pe pagina 1din 28

ASP.

NET

09.05.2012 1/28

ASP.NET

Introducere in ASP.NET Controale Web Pagina in ASP.NET Timpul de viata al paginii Procesarea paginii Controale de tip lista Structura unei aplicatii ASP.NET

Bibliografie Pro ASP.NET 3.5 in C# 2008, Second Edition: -2007 by Matthew MacDonald and Mario Szpuszta

Ioan Asiminoaei

ASP.NET

09.05.2012 2/28

ASP.NET
Caracteristici ASP.NET: Integrat cu .NET Framework Este compilat, nu interpretat Pagina este compilata cand este accesata prima data. Este multilimbaj Este gazduit de Common Language Runtime Este orientat-obiect Ruleaza pe orice browser Usor de configurat si distribuit Formulare Web Procesare pagina
Aplicatiile web se executa pe server. Cerintele clientului sunt procesate pe server folosind o tehnica numita postback, care trimite pagina pe server cand sunt indeplinite anumite conditii. Dupa ce primeste pagina, ASP.NET genereaza evenimentele pe partea de server pentru a notifica codul (a apela metodele atasate evenimentelor). Aplicatiile Web sunt fara stare. Dupa ce pagina este retransmisa clientului aceasta este distrusa din memoria serverului. Exista mecanisme ce asigura o anumita persistenta a datelor, cel mai cunoscut fiind view state , ce pastreaza informatia in campuri ascunse (hidden).

Ioan Asiminoaei

ASP.NET

09.05.2012 3/28

Formulare HTML
In HTML forma cea mai simpla de a trimite date de la client la server o constituie utilizarea formularelor (tag <form>). Un formular poate contine mai multe controale. Exemplu
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Programmer Questionnaire</title> </head> <body> <form method="post" action="page.aspx"> <div> Enter your first name:&nbsp; <input type="text" name="FirstName" /> <br /> Enter your last name:&nbsp; <input type="text" name="LastName" /> <br /><br /> You program with: <br />&nbsp;&nbsp;&nbsp; <input type="checkbox" name="CS" />C# <br />&nbsp;&nbsp;&nbsp; <input type="checkbox" name="VB" />VB .NET <br /><br /> <input type="submit" value="Submit" id="OK" /> </div> </form> </body> </html>

Cand utilizatorul face clic pe butonul OK, browser-ul colecteaza informatia din controale, o concateneaza intr-un strig si este trimsa serverul folosind operatia HTTP POST. Informatia trimisa este o serie de perechi nume/valoare separate prin &. Pentru controalele ce au valori booleene se va transmite numai valoarea on cand aceste controale sunt activate.
FirstName=Matthew&LastName=MacDonald&CS=on&VB=on

Daca schimbam pagina in ASP.NET, putem determina valoarea din control folosind sintaxa C#.
string firstName = txtFirstName.Text;

sau ceva de genul:


string firstName = Request.Form["FirstName"];

In ASP.NET toate controalele sunt plasate intr-un singur tag <form>, tag marcat cu atributul runat=server.

Ioan Asiminoaei

ASP.NET

09.05.2012 4/28

Modelul Event in ASP.NET


In acest model adaugam controale la formularul web si apoi decidem ce evenimente sa tratam. Modelul este asemanator cu cel dat de Windows Forms, dar lucreaza diferit. 1. Pagina ruleaza pentru prima data. ASP.NET creaza pagina si controalele din pagina, executa codul de initializare si apoi pagina este returnata clientului. Obiectul Page si controalele ce le contine sunt eliminate din memorie (sunt distruse). 2. Clientul executa actiuni asupra paginii (completare controale din pagina, etc.) ce au ca efect un postback. Pagina este trimisa cu toate datele din form catre server. 3. ASP.NET intercepteaza pagina returnata si recreaza obiectele din pagina la starea pe care au avut-o ultima data. 4. ASP.NET verifica cine a generat postback si apeleaza metoda corespunzatoare acelui eveniment (de ex. clic pe un buton). In acest moment se executa cod pe server (actualizare baze de date, etc.) si apoi se modifica obiectele controalelor pentru a reflecta noua informatie. 5. Pagina este transformata in HTML, trimisa clientului si apoi distrsa din server. Daca pe aceeasi pagina apare un nou postback se reia ciclul de la psul 2.

Postback automat
In ASP.NET actiunile le genereaza clientul si serverul proceseaza codul corespunzator. Anumite evenimente cum ar fi miscarea mouse-ului nu sunt tratate implicit. Nu mai exista acea bucla de mesaje ce caracterizeaza o aplicatie Window. Evenimentele sunt regenerate pe partea de server numai dupa ce s-a facut un postback al paginii. Exista controale ce au posibilitatea de a face postback automat, acest lucru insemnand ca la generarea unui eveniment al controlului, continutul paginii este trims catre server. Controalele trebuie sa aiba setata proprietatea
AutoPostBack = true

Ioan Asiminoaei

ASP.NET

09.05.2012 5/28

Care e mecanismul AutoPostback?


Cand AutoPostBack = true, ASP.NET foloseste un cod in JavaScript pentru a realiza legatura dintre client si server. Functia din JavaScript se numeste __doPostBack() ce foloseste doua campuri ascunse pentru a transmite parametrii:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

Codul in JavaScript (generat de ASP.NET) este urmatorul:


<script language="text/javascript"> <!-function __doPostBack(eventTarget, eventArgument) { var theForm = document.form1; theform.__EVENTTARGET.value = eventTarget; theform.__EVENTARGUMENT.value = eventArgument; theform.submit(); } // --> </script>

Controalele ce au AutoPostBack = true vor apela metoda __doPostBack() folosind atributele onclick sau onchange.

View State
De fiecare data cand o pagina este trimisa catre server, acesta recreaza obiectele din pagina pornind de la definitia acesteia data in fisierul .aspx. Eventualele modificari ale proprietatilor controalelor sunt luate dintr-un camp ascuns ce pastreaza ultima stare a paginii. Aceasta informatie constituie ceea ce numeste view state pentru pagina. Informatiile sunt pastrate sub forma de perechi cheie/valoare. Proprietatea EnableViewState = {true, false}.

Conformitate cu XHTML
Controalele web in ASP.NET sunt conforme cu standardul XHTML 1.1. ASP.NET reda controalele flosind marcaj conform cu XHTML, adica sunt respectate urmatoarele reguli: Tag si numele atributelor trebuie sa fie lowercase. Toate elementele trebuiesc inchise (<p></p>). Toate valorile atributelor trebuie sa fie furnizate intre ghilimele (runat=server). Trebuie folosit id pentru attribute si nu name. XHTML nu suporta frame si formatare fara CSS.

Ioan Asiminoaei

ASP.NET

09.05.2012 6/28

Urmatoarele controale ASP.NET pot folosi atributul target:


AdRotator TreeNode HyperLink HyperLinkColumn BulletedList

Definitia tipului de document


Fiecare tip de document XHTML incepe cu un doctype ce defineste tipul de XHTML ce va fi folosit. In pagina web ASP.NET, doctype trebuie plasat imediat dupa directiva Page, in portiunea de marcare a paginii web.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> ... </div> </form> </body> </html>

Etapele procesarii formelor web


Etapele in tratarea unei pagini (cereri) sunt: 1. 2. 3. 4. 5. 6. 7. Cerere client Initializare pagina in framework Executie cod initializare Validare Tratare evenimente Raspuns catre client Stergere obiecte din server (Cleanup).

Ioan Asiminoaei

ASP.NET

09.05.2012 7/28

Initializare pagina in framework


Evenimentul Page.Init.

Initializare cod utilizator


Eveniment Page.Load metoda Page_Load. Proprietatea IsPostBack = false la prima cerere a paginii.
if (!IsPostBack) { // Initializare controale la prima tratare a paginii FirstName.Text = "Enter your name here"; }

Validare
Proprietatea Page.IsValid.

Tratare evenimente
In acest moment pagina este complet incarcata si validata. Evenimentele ASP.NET sunt : Evenimente cu raspuns imediat : clic pe un buton, imagine, link, etc. Evenimente de tip Change : schimbare selectie intr-un control sau text intr-un TextBox. Trebuie sa avem declarat AutoPostBack = true.

Asociere data
Cand folosim controale surse de date, ASP.NET executa automat update si cereri asupra sursei de date ca parte a ciclului de viata al paginii. Orice modificari (insert, update, delete) sunt executate dupa executia tuturor evenimentelor dar inainte de evenimentul Page.PreRender. Dupa emiterea evenimentului Page.PreRender controalele surse de date executa cererile si insereaza datele in controalele ce folosesc sursa de date.

Cleanup
Eveniment Pade.Dispose.

Ioan Asiminoaei

ASP.NET

09.05.2012 8/28

Exemplifcare ordine de tratare a evenimentelor unei pagini


<%@ Page language="C#" CodeFile="PageFlow.aspx.cs" AutoEventWireup="true" Inherits="PageFlow" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Page Flow</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label id="lblInfo" runat="server" EnableViewState="False"> </asp:Label>0 <asp:Button id="Button1" runat="server" Text="Button"> </asp:Button> </div> </form> </body> </html>

In etapa urmatoare adaugam metode pentru evenimentele urmatoare: Page.Init, Page.Load, Page.PreRender, Page.Unload, si Button.Click.
private void Page_Load(object sender, System.EventArgs e) { lblInfo.Text += "Page.Load event handled.<br />"; if (Page.IsPostBack) { lblInfo.Text += "<b>This is not the first time you've seen this page.</b><br />"; } } private void Page_Init(object sender, System.EventArgs e) { lblInfo.Text += "Page.Init event handled.<br />"; } private void Page_PreRender(object sender, System.EventArgs e) { lblInfo.Text += "Page.PreRender event handled.<br />"; } private void Page_Unload(object sender, System.EventArgs e) { // This text never appears because the HTML is already // rendered for the page at this point. lblInfo.Text += "Page.Unload event handled.<br />"; } Codul pentru evenimentul clic al butonului: protected void Button1_Click(object sender, System.EventArgs e) { lblInfo.Text += "Button1.Click event handled.<br />"; }

Ioan Asiminoaei

ASP.NET

09.05.2012 9/28

Pagina este un container pentru controalele pe care le contine. Putem vizualiza controalele dintr-o pagina folosind urmatorul cod (in Page_Load):
foreach (Control control in Page.Controls) { Response.Write(control.GetType().ToString() + " - <b>" + control.ID + "</b><br />"); } Response.Write("<hr />");

Clasa Page
Toate formularele web sunt instante ale clasei Page.
Cateva proprietati importante ale acestei clase: Session Application Cache Request ; Request.QueryString[ id ] ; Response ; Response.Write() ; Response.Redirect( page.aspx ) ; Response.Redirect(http://...) Server ; Server.Transfer() ; HtmlEncode ; HtmlDecode ; UrlEncode ; UrlDecode ; MapPath ; User Trace

Ioan Asiminoaei

ASP.NET

09.05.2012 10/28

Controale server
Controalele server sunt clase in .NET Framework ce reprezinta elemente vizuale pe un formular web. Tipuri de controale server Controale server HTML: clase ce implementeaza elementele standard HTML. Pentru a schimba un element ordinar HTML intr-un control server trebuie adaugat atributul
runat=server.

Controale Web: sunt ca si HTML dar mai usor de folosit. Controale avansate: au posibilitatea de a genera mult mai mult markup HTML. Exemple: controalele Calendar, AdRotator si TreeView. Controale de validare: folosite in validarea datelor din alte controale din cadrul paginii. Controale pentru date: afiseaza o cantitate mare de date (grid, list). Suporta template, editare, sortare si paginare. Controale de navigare: navigare de la o pagina la alta. Controale Login: pentru autentificare la o baza de date.

Ierarhia controalelor din server


Toate controalele server sunt derivate din clasa Control aflata in System.Web.UI. Proprietati importante ale clasei Control ClientID - returneaza identificatorul clientului, identificator creat de ASP.NET.

Controls returneaza colectia de controale descendente. Colectia Page.Controls contine controalele din pagina. EnableViewState - controlul isi memoreaza starea? ID ID control Page returneaza o referinta la obiectul pagina ce contine controlul. Parent returneaza o referinta la parintele controlului. Visible : bool (true, false). DataBind() Asociaza controlul si toate controalele descendente la sursa de date specificata.

Ioan Asiminoaei

ASP.NET

09.05.2012 11/28

FindControl() cauta control dupa nume.

Controale Web
Clasa de baza WebControl derivate din Control. Proprietati importante AccessKey BackColor BorderColor BorderStyle - Dashed, Dotted, Double, Groove, Ridge, Inset, Outset, Solid, None. BorderWidth CssClass Enabled

Clasele de baza ale controlelor web


ASP.NET
<asp:Button>

HTML si proprietati
<input type="submit"/> or <input type="button"/> Text, CausesValidation, PostBackUrl, ValidationGroup, Click event

<asp:CheckBox>

<input type="checkbox"/> AutoPostBack, Checked, Text, TextAlign, CheckedChanged event

<asp:FileUpload>

<input type="file"> FileBytes, FileContent, FileName, HasFile, PostedFile, SaveAs()

<asp:HiddenField>

<input type="hidden"> Value

<asp:HyperLink>

<a>...</a> ImageUrl, NavigateUrl, Target, Text

<asp:Image>

<img/> AlternateText, ImageAlign, ImageUrl

<asp:ImageButton>

<input type="image"/> CausesValidation, ValidationGroup, Click event

Ioan Asiminoaei

ASP.NET
<asp:ImageMap>

09.05.2012 12/28
<map> HotSpotMode, HotSpots (collection), AlternateText, ImageAlign, ImageUrl

<asp:Label>

<span>...</span> Text, AssociatedControlID

<asp:LinkButton>

<a><img/></a> Text, CausesValidation, ValidationGroup, Click event

<asp:Panel>

<div>...</div> BackImageUrl, DefaultButton, GroupingText, HorizontalAlign, Scrollbars, Wrap

<asp:RadioButton>

<input type="radio"/> AutoPostBack, Checked, GroupName, Text, TextAlign, CheckedChanged event

<asp:Table>

<table>...</table> BackImageUrl, CellPadding, CellSpacing, GridLines, HorizontalAlign, Rows (collection)

<asp:TableCell>

<td>...</td> ColumnSpan, HorizontalAlign, RowSpan, Text, VerticalAlign, Wrap

<asp:TableRow>

<tr>...</tr> Cells (collection), HorizontalAlign, VerticalAlign

<asp:TextBox> <textarea>...</textarea>

<input type="text"/> sau

AutoPostBack, Columns, MaxLength, ReadOnly, Rows, Text, TextMode, Wrap, TextChanged

Exemplu
<asp:TextBox runat="server" ID="TextBox1" Text="This is a test" ForeColor="red" BackColor="lightyellow" Width="250px" Font-Name="Verdana" Font-Bold="True" Font-Size="20" />

Ioan Asiminoaei

ASP.NET Unitati de masura px pixeli % - procent din pagina afisata

09.05.2012 13/28

<asp:Panel Height="300px" Width="50%" id="pnl" runat="server" />

Iar din cod:


// Convert the number 300 to a Unit object // representing pixels, and assign it. pnl.Height = Unit.Pixel(300); // Convert the number 50 to a Unit object // representing percent, and assign it. pnl.Width = Unit.Percentage(50);

Enumerari
In cod se foloseste sintaxa C# (BorderStyle.Dashed) iar in aspx nu se include numele enumerarii:
<asp:TextBox BorderStyle="Dashed" Text="Border Test" id="txt" runat="server" />

Culori
In cod enumerarea Color. In aspx numele culorii.
ctrl.ForeColor = Color.Crimson; <asp:TextBox ForeColor="Red" Text="Test" id="txt" runat="server" /> <asp:TextBox ForeColor="#ff50f" Text="Test" id="txt" runat="server" />

Ioan Asiminoaei

ASP.NET

09.05.2012 14/28

Focus
DefaultFocus
<form id="Form1" DefaultFocus="TextBox2" runat="server">

Focusul se realizeaza cu ajutorul unei metode JavaScript, WebForm.AutoFocus(). Metoda este furnizata in mod automat de ASP.NET. Codul din aceasta metoda urmareste ideea de mai jos:
function WebForm_AutoFocus(focusId) { // Find the element based on the ID (code differs based on browser). var targetControl; if (__nonMSDOMBrowser) { targetControl = document.getElementById(focusId); } else { targetControl = document.all[focusId]; } // Check if the control can accept focus or contains a child that can. var focused = targetControl; if (targetControl != null && (!WebForm_CanFocus(targetControl)) ) { focused = WebForm_FindFirstFocusableChild(targetControl); } // If there is a valid control, try to apply focus and scroll it into view. if (focused != null) { try { focused.focus(); focused.scrollIntoView(); if (window.__smartNav != null) { window.__smartNav.ae = focused.id; } } catch (e) { } } }

Ioan Asiminoaei

ASP.NET

09.05.2012 15/28

Butonul implicit
Butonul implicit executa metoda atasata evenimentului click cand s-a apasat tasta Enter. Este la nivel de pagina web, iar in cadrul paginii poate fi la nivel de Panel. In <form> se foloseste proprietatea DefaultButton in care se specifica ID controlului.
<form id="Form1" DefaultButton="cmdSubmit" runat="server">

Butonul implicit trebuie sa fie un control ce implementeaza interfata IButtonControl. Controalele web Button, IinkButton si ImageButton implementeaza aceasta interfata. Controalele server HTML nu implementeaza IButtonControl. Panel cu bare de navigare (scroll) Controlul Panel are posibilitatea de scroll. Se foloseste proprietatea ScrollBars = {Vertical, Horizontal, Both, Auto}.
<asp:Panel ID="Panel1" runat="server" Height="116px" Width="278px" BorderStyle="Solid" BorderWidth="1px" ScrollBars="Auto"> This scrolls. <br /><br /> <asp:Button ID="Button1" runat="server" Text="Button" /> <asp:Button ID="Button2" runat="server" Text="Button" /> <br /> ... </asp:Panel>

Ioan Asiminoaei

ASP.NET

09.05.2012 16/28

Evenimentul clic si butonul ImageButton Evenimentul clic pe acest buton trimite in al doilea parametru un obiect ImageClickEventArgs ce are proprietatile X si Y (coordonatele unde s-a facut clic pe imagine). Se pot identifica astfel puncte de pe o harta si sa se execute un cod specific zonei.
protected void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e) { lblResult.Text = "You clicked at (" + e.X.ToString() + ", " + e.Y.ToString() + "). "; // Check if the clicked point falls in the rectangle described // by the points (20,20) and (275,100), which is the button surface. if ((e.Y < 100) && (e.Y > 20) && (e.X > 20) && (e.X < 275)) { lblResult.Text += "You clicked on the button surface."; } else { lblResult.Text += "You clicked the button border."; } }

Controalele List
Controale ce au ca articole o colectie de obiecte (ListBox, DropDownList, GridView, etc.).
<asp:DropDownList>

contine o colectie de obiecte <asp:ListItem>.

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


<asp:ListBox>

contine o colectie de obiecte <asp:ListItem>.

In HTML, tag <select> cu atributul size="x" unde x este numarul de articole vizibile.
<asp:CheckBoxList>

- aliniate intr-o tabela.

<asp:RadioButtonList> <asp:BulletedList>

o lista statica ordonata sau nu.

In HTML, tag <ul> sau <ol>. Se poate folosi si pentru a crea o lista de hyperlink-uri. Membri AutoPostBack = true => actioneaza la schimbarea selectiei curente. Items returneaza o colectie de articole ListItem.

Ioan Asiminoaei

ASP.NET

09.05.2012 17/28

SelectedIndex returneaza sau seteaza indexul articolului selectat. Pentru liste ce suporta selectia multipla trebuie scanata intreaga colectie pentru a determina articolele selectate (verificare proprietate Selected). SelectedItem returneaza o referinta la prmul articol ListItem selectat. DataSource - se seteaza la un obiect ce contine informatii ce dorim sa le afisam (DataSet, DataTable sau colectii). Cand se apeleaza DataBind() lista va fi completata cu obiecte din acea colectie. DataMember se foloseste impreuna cu asocierea de date, cand sursa de date contine mai mult de o tabela. DataMember indica ce tabela se va folosi. DataTextField indica ce proprietate sau camp din sursa de date va fi folosit ca text pentru articol.
DataValueField indica ce proprietate sau camp va fi folosit ca valoare pentru articol (nu e afisat dar poate fi citit in cod). DataTextFormatString seteaza formatarea stringului folosit pentru redarea articolului. Eveniment: SelectedIndexChanged la schimbarea selectiei.

Controalele de tip List selectabile sunt:


DropDownList ListBox CheckBoxList RadioButtonList.

Exemplu
<form id="form1" runat="server"> <div> <asp:ListBox runat="server" ID="Listbox1" SelectionMode="Multiple" Rows="5"> <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:ListBox> <br /><br /> <asp:DropDownList runat="server" ID="DropdownList1"> <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:DropDownList> <br /><br /> </div> </form>

Ioan Asiminoaei

ASP.NET

09.05.2012 18/28

Alte proprietati importante CheckBoxList si RadioButtonList


RepeatLayout

- controalele vor fi aranjate intr-o tablela (implicit) sau inline. Valori posibile: Table sau Flow.

RepeatDirection = {Horizontal, Vertical} RepeatColumns - numarul de coloane cand RepeatLayout=Table. CellPadding, CellSpacing, TextAlign folosite

cand RepeatLayout=Table.

Exemplu
<form id="form1" runat="server"> <div> <asp:ListBox runat="server" ID="Listbox1" SelectionMode="Multiple" Rows="5"> <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:ListBox> <br /><br /> <asp:DropDownList runat="server" ID="DropdownList1"> <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:DropDownList> <br /><br /> <asp:CheckBoxList runat="server" ID="CheckboxList1" RepeatColumns="3" > <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:CheckBoxList> <br /> <asp:RadioButtonList runat="server" ID="RadiobuttonList1" RepeatDirection="Horizontal" RepeatColumns="2"> <asp:ListItem Selected="true">Option 1</asp:ListItem> <asp:ListItem>Option 2</asp:ListItem> </asp:RadioButtonList> <asp:Button id="Button1" runat="server" Text="Submit" OnClick="Button1_Click"/> </div> </form>

Ioan Asiminoaei

ASP.NET

09.05.2012 19/28

Controlul BulletedList
Este echivalent cu <ul> sau <ol>. Articolele se ataseaza la control folosind proprietatea Items.
Proprietati
BulletStyle

determina stilul de marcare al listei. Valori posibile: Numbered, LowerAlpha, UpperAlpha, LowerRoman, UpperRoman, Disc, Circle, Square, CustomImage (caz in care trebuie setata proprietatea BulletImageUrl). seteaza prima valoare din lista (cu care se incepe marcarea eleentelor).

BulletImageUrl

FirstBulletNumber DisplayMode

: {Text, LinkButton eveniment clic, HyperLink textul este un URL}.

Controale pentru validarea intrarilor


Validarea se realizeaza atat pe partea de client cat si pe partea de server. Controalele de validare se declara in <form> si sunt atasate controalelor de intrare. In acest mod nu mai e necesar sa scriem cod pentru validare atat pe partea de client cat si pe cea de server. Daca procesul de validare nu este trecut cu succes, pagina nu este trimisa serverului sau nu este retransmisa clientului. <asp:RequiredFieldValidator> - controlul nu trebuie sa fie vid cand pagina este trimisa serverului. <asp:RangeValidator> - controleaza daca valorile asociate controlului sunt in intervalul specificat. <asp:CompareValidator> - controleaza daca valoarea asociata controlului se potriveste cu comparatia specificata mai mare, mai mic, etc - valoare din alt control sau o constanta. <asp:RegularExpressionValidator> - controleaza daca valoarea specificata se potriveste cu expresia regulata specificata. <asp:CustomValidator> - validator personalizat. Cod JavaScript pe partea de client, cod C# pe partea de server. <asp:ValidationSummary> - arata o sinteza a erorilor pentru fiecare camp. Observatie: Se pot folosi mai multi validatori pentru acelasi camp. Proprietatea RequiredFieldvalidator. RangeValidator, CompareValidator si RegularExpressionValidator nu verifica daca controlul este vid si vor returna succes in acest caz. RequiredFieldValidator rezolva problema.

Ioan Asiminoaei

ASP.NET

09.05.2012 20/28

Pentru controalele de tip lista proprietatea ce se valideaza este Value, care nu e afisata in browser. Va trebui sa folosim atributul Value pentru validare. Cand proiectam un control web derivat din WebControl putem specifica proprietatea ce va fi validata.
[ValidationProperty("Text")] public class FancyTextBox : WebControl {...}

Procesul de validare
Proprietatea CausesValidation = {true, false}. Se poate folosi validarea controalelor pentru a verifica o pagina in mod automat cand aceasta este trimisa la server sau manual in cod. Validarea automata presupune folosirea proprietatii CausesValidation pentru controale. Daca CausesValidation = false atunci ASP.NET va ignora validarea controalelor, pagina va fi returnata si codul de tratare al evenimentelor va rula normal. Daca CausesValidation = true (valoare implicita), ASP.NET va valida in mod automat pagina, se valideaza fiecare control din pagina si daca o validare nu se executa cu succes ASP.NET va returna pagina cu informatii despre erori (sroare). Clasa BaseValidator Membri ControlToValidate indica controlul ce va fi validatt. Display = {Static, Dynamic} indica modul cum va fi afisata eroarea. EnableClientScript = {true, false} daca este validare pe partea de client sau nu. True implicit. Enabled = {true, false} enable / disable validare. ErrorMessage mesajul de eroare afisat de ValidationSummary. Text textul erorii afisat controlul de validare. IsValid determina daca valoarea asociata controlului de intrare este valida sau nu. Poate fi realizata pe partea de client si pe partea de server. Observatie Putem verifica proprietatea Page.IsValid pentru a sti daca toate controalele de intrare din pagina sunt valide.

Ioan Asiminoaei

ASP.NET

09.05.2012 21/28

SetFocusOnError - focus mutat pe campul ce contine eroarea. Primul control setat, primul luat in considerare. ValidationGroup validare pentru anumite controale grupate. Validate() metoda revalideaza controalele si actualizeaza proprietatea IsValid.

Controlul RequiredFieldValidator
<asp:TextBox runat="server" ID="Name" /> <asp:RequiredFieldValidator runat="server" ControlToValidate="Name" ErrorMessage="Name is required" Display="dynamic">* </asp:RequiredFieldValidator>

Se va afisa * daca TextBox-ul este vid.

Controlul RangeValidator
<asp:TextBox runat="server" ID="DayOff" /> <asp:RangeValidator runat="server" Display="dynamic" ControlToValidate="DayOff" Type="Date" ErrorMessage="Day Off is not within the valid interval" MinimumValue="08/05/2008" MaximumValue="08/20/2008">* </asp:RangeValidator>

Controlul CompareValidator
<asp:TextBox runat="server" ID="Age" /> <asp:CompareValidator runat="server" Display="dynamic" ControlToValidate="Age" ValueToCompare="18" ErrorMessage="You must be at least 18 years old" Type="Integer" Operator="GreaterThanEqual">* </asp:CompareValidator>

sau
<asp:TextBox runat="server" TextMode="Password" ID="Password" /> <asp:TextBox runat="server" TextMode="Password" ID="Password2" /> <asp:CompareValidator runat="server" ControlToValidate="Password2" ControlToCompare="Password" ErrorMessage="The passwords don't match" Type="String" Display="dynamic"> <img src="imgError.gif" alt="The passwords don't match" /> </asp:CompareValidator>

Controlul RegularExpressionValidator
<asp:TextBox runat="server" ID="Email" /> <asp:RegularExpressionValidator runat="server" ControlToValidate="Email" ValidationExpression=".*@.{2,}\..{2,}" ErrorMessage="E-mail is not in a valid format" Display="dynamic">* </asp:RegularExpressionValidator>

Ioan Asiminoaei

ASP.NET

09.05.2012 22/28

Character Escapes Description Ordinary characters Characters other than .$^{[(|)*+?\ match themselves. \b Matches a backspace. \t Matches a tab. \r Matches a carriage return. \v Matches a vertical tab. \f Matches a form feed. \n Matches a newline. \ If followed by a special character (one of .$^{[(|)*+?\), this character escape matches that character literal. For example, \+ matches the + character. Character Class Description . Matches any character except \n. [aeiou] Matches any single character specified in the set. [^aeiou] Matches any character not specified in the set. [3-7a-dA-D] Matches any character specified in the specified ranges (in the example the ranges are 37, ad, AD). \w Matches any word character; that is, any alphanumeric character or the underscore (_). \W Matches any nonword character. \s Matches any whitespace character (space, tab, form feed, newline, carriage return, or vertical feed). \S Matches any nonwhitespace character. \d Matches any decimal character. \D Matches any nondecimal character. Using more advanced syntax, you can specify that a certain character or class of characters must be present at least once, or between two and six times, and so on. The quantifiers are placed just after a character or a range of characters and allow you to specify how many times the preceding character must be matched (see Table 4-19). Character Class Description . Matches any character except \n. [aeiou] Matches any single character specified in the set. [^aeiou] Matches any character not specified in the set. [3-7a-dA-D] Matches any character specified in the specified ranges (in the example the ranges are 37, ad, AD). \w Matches any word character; that is, any alphanumeric character or the underscore (_). \W Matches any nonword character. \s Matches any whitespace character (space, tab, form feed, newline, carriage return, or vertical feed). \S Matches any nonwhitespace character. \d Matches any decimal character. \D Matches any nondecimal character. Quantifier Description * Zero or more matches + One or more matches ? Zero or one matches {N} N matches {N,} N or more matches {N,M} Between N and M matches (inclusive)

Ioan Asiminoaei

ASP.NET

09.05.2012 23/28

Controlul CustomValidator
Pe partea de client
<script type="text/javascript"> function EmpIDClientValidate(ctl, args) { // the value is a multiple of 5 if the modulus by 5 is 0 args.IsValid=(args.Value%5 == 0); } </script>

Pe partea de server, eveniment CustomValidator.ServerValidate:


protected void EmpIDServerValidate(object sender, ServerValidateEventArgs args) { try { args.IsValid = (int.Parse(args.Value)%5 == 0); } catch { // An error is most likely caused by non-numeric data. args.IsValid = false; } } Pagina .aspx <asp:TextBox runat="server" ID="EmpID" /> <asp:CustomValidator runat="server" ControlToValidate="EmpID" ClientValidationFunction="EmpIDClientValidate" ErrorMessage="ID must be a multiple of 5" Display="dynamic">* </asp:CustomValidator>

Controlul ValidationSummary
Nu executa actiuni de validare ci prezinta un rezumat al erorilor aparute in procesul de validare. Daca proprietatea ShowMessageBox = true rezumatul erorilor este afisat pe partea de client intr-o caseta de dialog JavaScript sau pe pagina daca ShowSummary = true, atentie mai trebuie setata proprietatea DisplayMode in acest din urma caz.
DisplyMode = {SingleParagraph, List, BulletList}. <asp:ValidationSummary runat="server" ID="Summary" ShowSummary="true" DisplayMode="BulletList" HeaderText="<b>Please review the following errors:</b>" />

Ioan Asiminoaei

ASP.NET

09.05.2012 24/28

Folosirea validarilor in cod


Pentru a accesa validatorii in cod, trebuie iterata colectia Validators a paginii curente.
protected void Options_Changed(object sender, System.EventArgs e) { // Examine all the validators on the back. foreach (BaseValidator validator in Page.Validators) { // Turn the validators on or off, depending on the value // of the "Validators enabled" check box (chkEnableValidators). validator.Enabled = chkEnableValidators.Checked; // Turn client-side validation on or off, depending on the // value of the "Client-side validation enabled" check box // (chkEnableClientSide). validator.EnableClientScript = chkEnableClientSide.Checked; } // Configure the validation summary based on the final // two check boxes. Summary.ShowMessageBox = chkShowMsgBox.Checked; Summary.ShowSummary = chkShowSummary.Checked; }

Exemplu cu folosirea metodei Validate(). Ideea este de a adauga un buton cu CausesValidation=false. Cand se face clic pe buton se valideaza pagina manual sau se apeleaza metoda Validate() si se verifica prprietatea IsValid.
protected void cmdOK_Click(Object sender, EventArgs e) { // Validate the page. this.Validate(); if (!this.IsValid) { string errorMessage = "<b>Mistakes found:</b><br />"; // Create a variable to represent the input control. TextBox ctrlInput; // Search through the validation controls. foreach (BaseValidator ctrl in this.Validators) { if (!ctrl.IsValid) { errorMessage += ctrl.ErrorMessage + "<br />"; ctrlInput = (TextBox)this.FindControl(ctrl.ControlToValidate); errorMessage += " * Problem is with this input: "; errorMessage += ctrlInput.Text + "<br />"; } } lblMessage.Text = errorMessage; } }

Ioan Asiminoaei

ASP.NET

09.05.2012 25/28

Controale avansate
Elemente complexe de interfata; sunt controale complet diferite de cele din HTML. ASP.NET include numeroase controale avansate cum ar fi : controale de tip lista, de navigare, de securitate si controale pentru portaluri web. Urmatoarele controale nu intra in nici una din categoriile de mai sus. AdRotator: afiseaza bannere definite intr-un fisier XML. Calendar: selectie data calendaristica. MultiView, View, si Wizard: lucreaza asemanator ca Panel si permit comutarea intre grupurile de controale din pagina. Substitution: este un placeholder ce permite personalizarea output-ului din ASP.NET. Xml: are ca intrare un fisier XML si un fisier de stiluri XSLT si afiseaza rezultatul in browser.

Ioan Asiminoaei

ASP.NET

09.05.2012 26/28

Anatomia unei aplicatii ASP.NET


Toate paginile web dintr-o aplicatie web partajeaza aceleasi resurse de meorie, date globale la nivel de aplicatie, date la nivel de sesiune, date din cache. Toate paginile web dintr-o aplicatie web partajeaza aceleasi setari de configurare. Pot fi realizate setari diferite pentru subdirectoare individuale ale acelauiasi director virtual. Toate aplicatiile web genreaza evenimente globale la nivel de aplicatie in diferite etape ale executiei. Se foloseste fisierul Global.asax. Directorul virtual este structura de baza pentru o aplicatie ASP.NET. Aplicatiile ASP.NET pot contine urmatoarele : Pagini Web (fisiere .aspx) . Servicii Web (fisiere .asmx) comunicare cu aplicatii de pe alte platforme. Servicii WCF. Fisiere ce contin cod (code-behind) Fisier de configurare (web.config). global.asax cod pentru evenimente generate la nivel de aplicatei. Alte componente.

Structura de directoare a aplicatiei


Fiecare aplicatie trebuie sa aiba o structura bine planificata de directoare si subdirectoare. Alaturi de acestea ASP.NET defineste urmatoarele directoare : Descriere Contine assemblies .NET precompilat (in mod abisnuit DLL) folosite de aplicatia ASP.NET. App_Code Contine fisiere cod sursa ce sunt compilate in mod dinamic pentru a fi folosite in aplicatie. Codul compilat nu apare in directorul bin. Daca se foloseste modelul de proiect si nu cel Web Site atunci acest director nu este necesar. App_GlobalResources Mentine resursele globale accesibile fiecarei pagini din aplicatie. App_LocalResources Resurse numai pentru o pagina dedicata. App_WebReferences Mentine referinte la serviciile Web folosite de aplicatie. Fisiere WSDL si documente UDDI (Universal Description Discovery and Integration). App_Data Rezervat pentru baze de date si fisiere XML. App_Browsers Contine definitiile browser-ului memorat in fisiere XML. App_Themes Contine themes folosite de aplicatie.
Bin

Director

Ioan Asiminoaei

ASP.NET

09.05.2012 27/28

Fisierul aplicatie global.asax


Aici se scriu metodele si codul pentru tratarea evenimentelor globale la nivel de aplicatie. Clientul nu acceseaza acest fisier. Fisierul este optional. Acest fisier nu contine tag-uri HTML sau ASP.NET, ci metode cu un nume predefinit. Evenimentele aplicatiei Evenimente ce apar la fiecare cerere Evenimente ce apar sub anumite conditii. Evenimente ce apar la fiecare cerere
Application_BeginRequest()

: apelata la startul fiecarei cereri. : apelata inainte de autentificare.

Application_AuthenticateRequest()

Application_AuthorizeRequest() : apelata

dupa ce utilizatorul a fost autentificat, e momentul de a verifica drepturile urilizatorului. Se pot atribui privilegii speciale in aceasta etapa. impreuna cu cache. Pagina se ia din cache determinarii informatiilor despre fara a executa alt cod.

Application_ResolveRequestCache() : folosita

Application_AquireRequestState() : apelata inaintea

sesiune si folosita pentru a popula colectia Session.


Application_PreRequestHandlerExecute() : apelata inainte ca HTTP sa execute cererea. Application_ReleaseRequestState() : apelata cand informatia specifica despre sesiune este pe

cale de a fi serializata din colectia Session astfel incat aceasta este disponibila pentru noua cerere.
Application_UpdateRequestCache() : apelata inainte ca informatia sa fie adaugata in cache. Application_EndRequest() : apelata la sfarsitul cererii dar inainte ca obiectele sa fie eliminate.

Loc bun pentru codul de curartare.

Evenimente ce nu se lanseaza la fiecare cerere Application_Start(): start aplicatie. Se poate scrie cod pentru initializare. Session_Start(): start o noua sesiune. Initializare informatii specifice utilizatorului. Application_Error(): cand apare o eroare in aplicatie. Session_End(): la terminarea sesiunii unui client. Se apeleaza numai daca folosim o sesiune in-proces (mod InProc). Cod pentru curatare. Application_End(): apelata inainte ca aplicatia sa se termine.

Ioan Asiminoaei

ASP.NET

09.05.2012 28/28

Application_Disposed(): Se poate verifica daca resursele critice au fost eliberate. Ceea ce tine in general de cod unmanaged.

Configurare ASP.NET
Se realizeaza prin intermediul fisierelor XML. Acestea nu sunt niciodata blocate si sunt usor de accesat si replicat (cu existenta drepturilor necesare). Fisierul machine.config Se gaseste in directorul C:\windows\Microsoft.Net\Framework\versiune_net\Config. Este bine comentat si poate fi folosit pentru crearea unui fisier de configurare propriu. Fisierul web.config Fiecare aplicatie web mosteneste setari din machine.config si fisierul web.config din radacina directorului virtual. Scheletul de baza al fisierului web.config este:
<?xml version="1.0"?> <configuration> <appSettings /> <connectionStrings /> <system.web> <!-- ASP.NET configuration sections go here. --> </system.web> </configuration>

In ASP.NET 3.5 s-au adaugat sectiuni noi la fisierul de configurare.


<?xml version="1.0"?> <configuration> <configSections /> <appSettings /> <connectionStrings /> <system.web /> <system.codedom /> <system.webServer /> </configuration>

Ioan Asiminoaei

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