Una esigenza sentita per chi programma in asp.net è quella di poter controllare gli elementi dell'head di una pagina aspx in maniera programmatica, ovvero via codice di programmazione. Tramite codice C# o VB è possibile gestire: aggiungere, modificare o rimuovere gli elementi presenti nell'head quali title, meta tag e risorse, il tutto in maniera semplice ed elegante. Manipolare l'head in asp.net è semplice, andiamo a scoprire come fare.
Per gestire l'head in asp.net dobbiamo richiamare la proprietà Header della classe Page, detta proprietà ci permette di accedere all'istanza della classe HtmlHead che rappresenta l'head della pagina aspx (ovviamente l'head deve presentare l'attributo runat="server" nel markup). Una volta ottenuto l'oggetto HtmlHead possiamo manipolare l'head della pagina a nostro piacimento.
Modificare o aggiungere il titolo della pagina via codice
Ad esempio assegnare il Title alla pagina è davvero semplicissimo, basta fare:
protected void Page_Load(object sender, EventArgs e)
{
this.Header.Title = "Ecco il titolo della mia pagina";
}
Volendo possiamo anche omettere l'operatore this.
Aggiungere un meta tag all'head via codice
Se desideriamo invece aggiungere un meta tag all'head quale potrebbe essere la description, possiamo scrivere:
protected void Page_Load(object sender, EventArgs e)
{
HtmlMeta description = new HtmlMeta();
description.Name = "description";
description.Content = "Ecco qui il contenuto della mia meta descrizione";
Header.Controls.Add(description);
}
Come vedete a differenza di prima, abbiamo avuto prima la necessità di creare un oggetto HtmlMeta, aggiungerne l'attributo name ed il contenuto per poi infine inserirlo nella pagina sempre tramite la proprietà Header.
Rimuovere un meta tag dall'head via codice
Se invece volessimo rimuovere un meta tag dall'head in asp.net, allora la situazione si complica un poco, poiché ci troviamo costretti a ciclare su tutti i controlli presenti nell'head, verificare se questi sono oggetti HtmlMeta e poi individuare tramite la proprietà Name quale di questi desideriamo cancellare, supponiamo ad esempio di voler rimuovere il meta tag keywords, andremo a scrivere in questo modo:
protected void Page_Load(object sender, EventArgs e)
{
foreach (var control in this.Header.Controls)
{
if (control is HtmlMeta)
{
HtmlMeta metaobj = (HtmlMeta)control;
if (metaobj.Name.ToLower().Equals("keywords"))
{
Header.Controls.Remove(metaobj);
break;
}
}
}
}
Siamo stati forzati a scrivere questo ciclo, poiché a meno che in fase di sviluppo non abbiamo specificato un id per i meta tag, non possiamo cercarli in maniera mirata (tramite id) ma dobbiamo cercare quello interessato su tutti.
In questo ultimo rigo di codice è importantissima l'istruzione break che interrompe e fa uscire dal ciclo dopo aver rimosso il controllo meta; se non l'avessimo messa, il codice avrebbe continuato a ciclare sul prossimo controllo generando l'ecceczione "insieme modificato. l'operazione di enumerazione non può essere eseguita", questo è facile da intuire poiché l'istruzione del ciclo precedente ha rimosso un elemento della collezione a run-time modificandone gli indici.
Potrei continuare con ulteriori esempi, mostrandovi come possiamo aggiungere link a risorse quali file javascript o css, basterebbe creare un oggetto link e definirne l'attributo rel come text/css o altro, ma penso che abbia reso bene l'idea di come è facile manipolare l'head programmaticamente in asp.net, per ulteriori domande o approfondimenti lo spazio dei commenti è a vostra disposizione.