27.06.2014 Views

A.A. 2013-2014

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Prof. Mauro Giacomini<br />

A.A. <strong>2013</strong>-<strong>2014</strong>


Le WebForm<br />

• Consentono la realizzazione di interi progetti web-oriented<br />

in puro HTML che sono eseguibili su tutti i browser<br />

• La programmazione delle WebForm avviene con un qualsiasi<br />

linguaggio supportato dal CLR<br />

• Progettazione dell’interfaccia visuale a oggetti<br />

• Separazione del codice (gestione eventi) dalla presentazione<br />

(invece nelle versioni precedenti al .NET framework<br />

convivevano nello stesso documento)<br />

• Gestione dello stato della pagina (ovvero registrazione delle<br />

scelte svolte da ogni utente che accede alla pagina Web)<br />

• Integrate con il modello ad eventi di Windows sia per il lato<br />

server sia per il lato client


Creazione di una WebForm<br />

• Sulla WebForm si lavora con una solita form popolata dagli<br />

oggetti tipici delle interfacce con il solito drag and drop (o<br />

meglio con una pianificazione a tabella della pagina)<br />

• Estensione .aspx propria della tecnologia ASP.NET<br />

• Distinzione dei componenti<br />

• Lato server<br />

• Lato client<br />

• Separazione della parte in HTML (interfaccia utente –<br />

estensione .aspx) dalla logica applicativa (scritta in VB.NET –<br />

estensione .vb o in C#, estensione .cs …)


WebForm Designer<br />

• Foglio bianco che raccoglie le componenti dal toolbox<br />

di tipo:<br />

• Tipo WebForm<br />

• Tipo Data<br />

• Tipo Components<br />

• HTML<br />

• Altre possibili componenti se installate ad hoc<br />

• Usuale impostazione delle proprietà degli oggetti


Componenti lato server<br />

• Producono i diversi tipi di output visualizzabile sia<br />

sui diversi dispositivi sia sui browser<br />

• Due insiemi di componenti lato server<br />

• Controlli HTML<br />

• Controlli Web<br />

• Generano le pagine HTML dell’applicazione<br />

• Preservano lo stato della sessione<br />

• Espongono gli eventi necessari alla gestione lato<br />

client


Componenti HTML<br />

• Namespace: System.Web.UI.HtmlControls<br />

• Attivati dalla direttiva runat=“server”<br />

• Es. istanza di HtmlInputText chiamata text1<br />


Gerar<br />

chia<br />

della<br />

classe<br />

HtmlC<br />

ontrol<br />

s


Tag<br />

vs<br />

component<br />

i


Componenti Web<br />

• Namespace: System.Web.UI.WebControls<br />

• Sostanzialmente identici ai controlli della form di VB delle<br />

precedenti versioni<br />

• Sfruttano la tecnologia della piattaforma di ASP.NET<br />

• Componenti complessi es:<br />

• Calendario<br />

• Crystal Report Viewer<br />

• Autoadattamento allo schermo con il browser<br />

• Data-bound capability, sono tutti associabili a una sorgente<br />

di dati (inizializzata e connessa)<br />

• Direttiva runat = “server”


Gerarchia<br />

componenti<br />

Web


Elenco componenti (1)<br />

• Label (testo non modificabile dal client che legge la pagina)<br />

• TextBox<br />

• Testo modificabile (direttamente dal client) e data-bound<br />

• Modalità single-line, multi-line, password<br />

• CheckBox (gestione sì/no)<br />

• RadioButton (gestione sì/no) mutuamente esclusiva<br />

• DropDownList (lista di scelta apribile per selezione singola)<br />

• ListBox (elenco di voci selezionabili anche a gruppi)<br />

• CheckBoxList<br />

• RadioButtonList


Elenco controlli (2)<br />

• Button<br />

• Invia al server dati immessi dal client<br />

• Definizione di eventi<br />

• Link button (simile al button, ma con hyperlink)<br />

• Image button<br />

• HyperLink<br />

• Imagedisplay<br />

• Panel (raggruppa componenti)


Elenco controlli (3)<br />

• Table (contiene strutture tabellari in associazione con<br />

TableRow e TableCell)<br />

• Calendar (visualizzazione di calendario perpetuo)<br />

• Repeater (controllo list-bound connesso a una<br />

sorgente di dati che è visualizzata con controlli<br />

personalizzati con un template HTML)<br />

• DataList (simile al precedente con diverso metodo di<br />

personalizzare il layout)<br />

• DataGrid (connessione ai dati e presentazione in<br />

tabella con possibilità di modifiche direttamente sul<br />

DB)<br />

• AdRotator (visualizza a banner informazioni in XML)


Varie<br />

• Commenti - sintassi<br />

• <br />

• Generazione applicazione Web<br />

• scegliere progetto ASP .NET Web Application<br />

• due facce: design e HTML


Modello degli eventi<br />

• Separazione fra dove si verifica l’evento (client) e dove viene<br />

gestito (server)<br />

• Le informazioni relative all’evento sono catturate sul client<br />

e inviate al server con il protocollo HTTP<br />

• La gestione delle Web form interpreta il messaggio e invoca<br />

la procedura connessa<br />

• Questi meccanismi sono trasparenti nella programmazione<br />

della programmazione ma con l’accorgimento di rispettare<br />

alcuni vincoli per evitare la perdita di efficienza del<br />

programma


Vincoli sugli eventi<br />

• Numero di controlli limitati<br />

• non supportati eventi frequenti es onMouseOver<br />

• versioni speciali di eventi quali onChange<br />

• Gestione differita degli eventi<br />

• controlli server attivati solo da un clic su un pulsante catturati<br />

dal controllo sul client e inviati tutti assieme<br />

• gestione di tutti gli eventi di modifica senza ordine prima e<br />

dopo la procedure di gestione del tasto premuto<br />

• per obbligare l’invio di un evento di modifica prima degli altri<br />

porre AutoPostBack a True<br />

• Distribuzione degli eventi<br />

• controlli complessi (DataList e DataGrid) intercettano gli<br />

eventi dei controlli contenuti e generano un evento generico<br />

ItemCommand con parametri


Procedure d’evento<br />

<br />

Associa all’evento Click la procedura Convalida<br />

Due parametri associati all’evento<br />

• Oggetto che ha generato l’evento<br />

• Oggetto con informazioni specifiche sull’evento (EventArgs) ad<br />

esempio ImageButton genera ImageClickEventArgs con<br />

coordinate<br />

Sub Convalida(src As Object, e As EventArgs)<br />

private void Convalida(object sender, EventArgs e) C#<br />

VB


Eventi delle Web Form<br />

• Page_Init (inizializzazione delle variabili, si crea un’istanza<br />

lato server dell’oggetto Page)<br />

• Page_Load (ogni volta che viene caricata dal runtime di<br />

ASP.NET a causa di una richiesta del browser, si può<br />

cambiare il contenuto dei controlli)<br />

• Page_Unload (ultimo evento di una pagina caricamento di<br />

altra pagina, attività di registrazione in un file di log,<br />

chiusura di file e database, distruzione dell’oggetto Page)


Esempi<br />

Sub Page_Load (src as Object, e as EventArgs)<br />

txtName.Text = “Pippo”<br />

End Sub<br />

Sempre Pippo nella Text ad ogni refresh<br />

Sub Page_Load (src as Object, e as EventArgs)<br />

if not Page.IsPostBack Then<br />

txtName.Text = “Pippo”<br />

end if<br />

End Sub<br />

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

{<br />

txtName.Text = “Pippo”;<br />

}<br />

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

{<br />

if (!(Page.IsPostBack))<br />

txtName.Text = “Pippo”;<br />

}<br />

Solo la prima volta Pippo nella Text


Validazione dell’input<br />

• Lato server<br />

• Più sicura (si può fare sempre)<br />

• Più lenta (necessita di mandare tutti i dati al server)<br />

• Lato client<br />

• Più veloce<br />

• Incerta (l’utente può aver disabilitato gli script)<br />

• Controlli di ASP.NET automaticamente scelgono, se<br />

possibile lato client altrimenti lato server


Sintassi<br />

<br />


Modalità di Visualizzazione<br />

• Static: compare quando si verifica l’errore, ma permane<br />

anche se l’errore è corretto fino al successivo submit<br />

• Dynamic: compare in presenza di errori e scompare se si<br />

risolve il problema anche senza un submit<br />

• None: non visualizza il messaggio, solo lo registra nel<br />

ValidationSummary<br />

• Si possono applicare più controlli di validazione a uno<br />

stesso oggetto, basta indicare tutte le volte che<br />

necessario il nome dell’oggetto da controllare nella<br />

proprietà ControlToValidate.


RequiredFieldValidator<br />

• Controllo di immissione obbligatoria<br />

• Esempio<br />

<br />

<br />


RangeValidator<br />

• Controllo del range del valore inserito (se vuoto, valido)<br />

• Da esplicitare il tipo di variabile<br />

• Tipi possibili: Integer, Double, Currency, Date, String<br />

• Esempio<br />

<br />

<br />


CompareValidator<br />

• Confronto con valore predefinito (ValueToCompare) o valore di un altro controllo (ControlToCompare),<br />

con tipo<br />

• Da indicare l’operatore (Operator), possibili operatori:<br />

• Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, DataTypeCheck<br />

• Esempio<br />

<br />

<br />


RegularExpressionValidator<br />

• Controllo su uno schema predefinito del dato di ingresso (carta di credito, email, codicefiscale, ecc…)<br />

• Proprietà specifica: ValidationExpression<br />

• Caratteri da utilizzare (vedi pagina successiva)<br />

• Esempio<br />

<br />

<br />


Caratteri per espressioni regolari<br />

(1)<br />

| Consente di specificare valori alternativi<br />

* Specifica 0 o più occorrenze dell’elemento che lo<br />

precede es ba* significa b, ba, baa, baaa, baaaa, …<br />

+ Specifica 1 o più occorrenze dell’elemento che lo<br />

precede es ba+ significa ba, baa, baaa, baaaa, …<br />

? Specifica 0 o 1 occorrenze dell’elemento che lo<br />

precede es ba? significa b o ba<br />

[ ] Consentono di specificare valori alternativi<br />

[aeiou] indica una qualsiasi vocale


Caratteri per espressioni regolari<br />

(2)<br />

\w Indica un qualsiasi carattere alfanumerico compreso<br />

_<br />

\s Indica un qualsiasi carattere di spaziatura<br />

\d Indica un qualsiasi carattere numerico<br />

{} Consente di indicare un numero preciso di occorrenze<br />

o di delimitarne il numero massimo o minimo. Es. a{3}<br />

indica aaa; a{3,} indica le stringhe di almeno tre a; a{,3}<br />

indica da 0 a tre caratteri a; a{3,5} indica aaa, aaaa,<br />

aaaaa.<br />

() Consente di individuare sottostringhe Es:<br />

\w.+(exe|com|bat) indica tutti i possibili eseguibili<br />

DOS


CustomValidator<br />

Consente di definire i vincoli da verificare perché un input<br />

utente sia valido specificando se la convalida vada fatta sul<br />

client (ClientValidationFunction) o sul server<br />

(OnServerValidate). Sul server la validazione inizia con<br />

l’evento ServerValidate a cui è passato il parametro<br />

ServerValidateEventArgs la cui proprietà Value contiene<br />

il valore inserito nel controllo indicato. Il risultato del processo<br />

di validazione viene restituito nella proprietà IsValid dello<br />

stesso parametro.


CustomValidatorEsempio<br />

<br />

<br />

<br />

Sub Convalida (src As Object, e As ServerValidateEventArgs)<br />

If Page.IsValid Then<br />

Msg.Text = “Ok!”<br />

End If<br />

End Sub<br />

Sub NumeroPari (src as Object, e as ServerValidateEventArgs)<br />

Dim num as Integer<br />

num = Integer.Parse(e.Value)<br />

e.IsValid = ((num mod 2)=0)<br />

End Sub<br />

<br />

<br />

<br />

<br />

<br />

void Convalida (object src, ServerValidateEventArgs e)<br />

{<br />

if (Page.IsValid)<br />

Label1.Text = "Ok!";<br />

}<br />

void NumeroPari (object src, ServerValidateEventArgs e)<br />

{<br />

int num;<br />

num = int.Parse(e.Value);<br />

e.IsValid = ((num % 2)==0);<br />

}<br />

<br />


Corpo<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

• Nelle ultime versioni per usare un validator si deve<br />

aggiungere negli appsettings della web config:<br />


Validation Summary (1)<br />

• Se il controllo di validazione intercetta un errore, questo<br />

viene visualizzato al momento di esecuzione del controllo<br />

con modalità indicata dalla proprietà Display.<br />

• Si possono visualizzare tutti questi eventuali messaggi in<br />

un unico punto della pagina con il controllo<br />

ValidationSummary<br />

• La proprietà IsValid dell’oggetto Page è True quando<br />

tutti i controlli di validazione sono stati soddisfatti


Validation Summary (2)<br />

• Se si mette un ValidationSummary sulla Web Form,<br />

quando la proprietà IsValid dell’oggetto Page è<br />

False, vengono automaticamente interrogati tutti i<br />

controlli di validazione e gli eventuali messaggi di<br />

errore sono raccolti e visualizzati nel controllo<br />

ValidationSummary.<br />

• Con il ValidationSummary i messaggi non sono<br />

visualizzati direttamente, a meno che non siano<br />

specificati tra i tag di apertura e chiusa.


ValidationSummary: Proprietà<br />

• DisplayMode: Indica come si visualizzano i messaggi di errore<br />

nella lista. Valori: BulletList, List, SingleParagraph<br />

• HeaderText: Intestazione della lista dei messaggi di errore.<br />

• ShowSummary: Indica se visualizzare o meno la lista dei messaggi<br />

sulla pagina, valore predefinito True.<br />

• ShowMessageBox: Indica se la lista dei messaggi deve essere<br />

visualizzata in una messagebox, valore predefinito False .<br />

• EnableClientScript: Se posta a False la validazione client<br />

side è inibita, togliendo effetto alle impostazioni di<br />

ShowMessageBox.

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

Saved successfully!

Ooh no, something went wrong!