A.A. 2013-2014
Prof. Mauro Giacomini A.A. 2013-2014
- Page 2 and 3: Le WebForm • Consentono la realiz
- Page 4 and 5: WebForm Designer • Foglio bianco
- Page 6 and 7: Componenti HTML • Namespace: Syst
- Page 8 and 9: Tag vs component i
- Page 10 and 11: Gerarchia componenti Web
- Page 12 and 13: Elenco controlli (2) • Button •
- Page 14 and 15: Varie • Commenti - sintassi •
- Page 16 and 17: Vincoli sugli eventi • Numero di
- Page 18 and 19: Eventi delle Web Form • Page_Init
- Page 20 and 21: Validazione dell’input • Lato s
- Page 22 and 23: Modalità di Visualizzazione • St
- Page 24 and 25: RangeValidator • Controllo del ra
- Page 26 and 27: RegularExpressionValidator • Cont
- Page 28 and 29: Caratteri per espressioni regolari
- Page 30 and 31: CustomValidatorEsempio Sub Conva
- Page 32 and 33: Validation Summary (1) • Se il co
- Page 34: ValidationSummary: Proprietà • D
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.