Nella scorsa puntata della nostra guida all’uso di Visual Studio 2010, abbiamo spiegato che cosa sono i controlli server HTML, definiti all’interno del “namespace” System.Web.UI.HtmlControls.
Ogni tipo di controllo consta di una classe a sé: la pagina creata in precedenza definiva tre controlli, istanze delle classi HtmlForm, HtmlInputButton e HtmlInputText.
Come già evidenziato, gli HTML server controls sono gli equivalenti lato server per gli elementi HTML standard. Si tratta di controlli ideali per coloro che hanno già esperienza e preferiscono lavorare con le familiari tag HTML. Inoltre, possono essere sfruttati per una migrazione più “dolce” da “classic ASP” dal momento che le modifiche richieste sono più contenute.
I controlli server HTML forniscono generalmente insiemi di proprietà che riflettono i corrispondenti attributi assegnati alle normali tag HTML. La classe HtmlImage, ad esempio, mette a disposizione proprietà quali src, width, height, border, align
ed alt
.
Gli HTML server controls mettono a disposizione, oltre ad un vasto numero di proprietà, due eventi: ServerClick
o ServerChange
.
Il primo evento consente di stabilire le azioni da effettuare, lato server, in risposta al clic dell’utente che utilizza l’applicazione dal client. L’evento ServerClick
è fornito, ad esempio, dai controlli che visualizzano dei pulsanti (buttons).
Nel caso di un collegamento ipertestuale (il classico “anchor” <a>
), lo sviluppatore può usare due approcci per gestire l’evento “clic”: servirsi della proprietà HRef
del controllo HtmlAnchor
per puntare un URL specifico oppure ricorrere all’evento ServerClick
. In quest’ultimo caso l’utente non sarà reindirizzato ad un’altra pagina a meno che ciò non venga esplicitamente previsto nel codice dell’evento ServerClick
.
L’evento ServerChange
, invece, si manifesta allorquando venga applicata una modifica ad un testo o ad un controllo di selezione. Non è così utile come potrebbe sembrare di primo acchito, dal momento che – affinché il codice dell’evento ServerChange
venga eseguito – è necessario che la pagina venga reinviata al server attraverso, ad esempio, un clic su un pulsante. Solo a questo punto si verificherà l’evento ServerChaneg
, per tutti i controlli il cui contenuto ha subito una modifica.
La classe HtmlControl
offre anche il supporto integrato per l’accesso alle basi di dati, aspetto di importanza cruciale in tutte le moderne applicazioni web. Tale classe va intesa come la classe “di base” a partire dalla quale vengono definiti tutti i vari controlli HTML. Nello specifico, i vari controlli HTML che constano sia di una tag di apertura che di una tag di chiusura (a titolo esemplificativo, <a>, <div>, <form>
), ereditano proprietà, metodi ed eventi dalla classe HtmlContainerControl
che a sua volta “eredita” dalla principale HtmlControl
.
Le proprietà InnerText
(già utilizzata nella scorsa puntata) e InnerHtml
consentono, rispettivamente, di leggere o modificare il testo compreso tra la tag di apertura e quella di chiusura del controllo HTML indicato.
Nel primo caso, eventuali caratteri < e > presenti nel testo saranno “neutralizzati” quindi <grassetto>
verrà visualizzato come <grassetto>
e non grassetto, come accade invece nel secondo caso.
La classe HtmlInputControl
che “eredita” sempre da HtmlControl
, definisce alcune proprietà impiegate nelle tag <input>
(ricordiamo che tale tag può essere usata per rappresentare diverse tipologie di controlli di input: è l’attributo type
a permettere la scelta del tipo di controllo da utilizzare nella pagina web).
Ad esempio, <input type="submit">
provoca la comparsa di un pulsante mentre <input type="text">
di una casella di testo. Le proprietà di HtmlImputControl
sono autoesplicative: Type
e Value
.
La classe “Page”
Ogni pagina web costruita utilizzando Visual Studio, è una sorta di classe “personalizzata” che “eredita” da System.Web.UI.Page
. Lo si può verificare nella finestra del codice di ciascuna pagina aspx ove figura:
Grazie a questa riga di codice, è possibile “ereditare” un vasto numero di proprietà e metodi particolarmente utili.
Di seguito alcune delle proprietà di base:
può essere usata, ad esempio, per conteggiare il numero di visite accumulate da una specifica pagina.
può essere sfruttata, per esempio, per salvare i prodotti che l’utente è in procinto di ordine all’interno di un sito web di e-commerce (il classico “carrello della spesa”).
Questa collection offre al programmatore uno strumento per memorizzare oggetti che sono “pesanti” da creare. In questo modo gli oggetti già istanziati possono essere riutilizzati in altre pagine o “riciclati” nelle comunicazioni con altri client.
Si tratta di una proprietà che può assumere solo i valori “vero” o “falso”. Essa indica se è la prima volta che la pagina web viene eseguita o se questa è oggetto di una nuova elaborazione in seguito alla pressione, ad esempio, di un pulsante o comunque di un determinato evento.
, questa proprietà permetterà di “scavalcare” l’omonima impostazione dei vari controlli presenti nella pagina. Nessun controllo manterrà informazioni sul suo stato.
che contiene informazioni circa la corrente richiesta.
: esso rappresenta la risposta ASP.NET che verrà trasmessa al browser dell’utente.
Se l’utente è stato autenticato, questa proprietà sarà inizializzata con i dati relativi all’utente connesso.
, ad esempio, è possibile codificare del testo in modo tale che possa essere inserito, in modo sicuro, in un URL oppure nel codice HTML della pagina.
Codifica del codice HTML
Vediamo subito un esempio di codifica del testo utilizzando Server
.
Com’è noto, i segni di maggiore e minore (<
e >
) hanno un importante significato in HTML: essi consentono di disporre nella pagina le varie tag. L’utilizzo dei simboli di maggiore e minore può essre fonte di problemi allorquando si abbia la necessità di impiegarli come contenuto della pagina web.
Si supponga di voler visualizzare la stringa di testo Questa è una <prova>
nella pagina web. Se si prova a piazzare tale testo nella pagina oppure in un controllo HTML, si otterrà semplicemente Questa è una
. Questo accade perché <prova>
viene interpretato come una (inesistente) tag HTML.
Il problema è ancor più sentito se si volesse tentare di visualizzare una frase del genere: Per il grassetto è necessario ricorrere alla tag <b> seguita dal testo d'interesse
. In questo caso, il browser interpreterà <b>
come una tag HTML ponendo in grassetto tutto il testo seguente.
Quando si utilizza la proprietà InnerText
di un controllo HTML, il testo viene automaticamente codificato e le varie tag HTML, eventualmente presenti, “neutralizzate”.
In ogni occasione, è comunque possibile servirsi del metodo HtmlEncode()
, fornito dalla proprietà Page.Server
presentata in precedenza.
Ecco un paio di esempi di utilizzo:
nomecontrollo.InnerHtml = Server.HtmlEncode("Questa è una <prova>")
nomecontrollo.InnerHtml = Server.HtmlEncode("Per il grassetto è necessario ricorrere alla tag <b> seguita dal testo d'interesse")
Il metodo HtmlEncode()
si rivela particolarmente utile quando si provvede a recuperare dei dati da un database e non si è sicuri che la base dati contenga codice HTML valido. Il metodo HtmlDecode()
può essere eventualmente sfruttato per riconvertire il codice nella sua forma originaria.
La classe HttpServerUtility
, oltre ai due metodi appena illustrati offre URLEncode
, per convertire del testo in una forma utilizzabile all’interno di URL oltre al corrispondente URLDecode()
.
Nella prossima puntata passeremo ad analizzare gli application events ed il file web.config
.
Al momento è disponibile solamente in inglese.
Per seguire le prime due puntate, è sufficiente prelevare ed installare solamente Visual Web Developer 2010 Express e creare un nuovo progetto Visual Basic/ASP.NET.
Ad ogni modo, suggeriamo di scaricare il file ISO del CD d’installazione (opzione All – Offline Install ISO file image; in alternativa è possibile cliccare qui) e masterizzarlo con un programma “ad hoc” (ved. queste pagine).
Il downloa delle versioni di valutazione complete di Visual Studio 2010 è invece effettuabile facendo riferimento a questa pagina.