Giusto un piccolo update al Blog, in modo da poter dimostrare di essere ancora vivo ed "attivo"... :-)

Dunque un pò di tempo fà mi sono imbattuto nella necessità di dover aggiungere al run-time un file di Style Sheet (tipicamente con estensione ".css") ad una pagina ".aspx" (ASP.NET 2.0). Tipicamente le direttive al browser circa quali file css caricare vengono specificate nella sezione "<head>" di una pagina html: poichè il contesto nel quale mi trovavo era una webpart per DotNetNuke (ossia un controllo ".ascx") e poichè il file ".css" da tirare sù dipendeva da diverse variabili che potevo conoscere solo al run-time, ho dovuto trovare una soluzione al problema, forse un poco fuori dagli schemi.

 

Dunque, il codice è il seguente:

 

 

   Control page = null;

 

   Control c = Parent;

   while (c != null)

   {

       page = c;

       c = c.Parent;

   }

 

   HtmlLink stylesheet = new HtmlLink();

 

   stylesheet.Href = "http://www.someserver.com/stylesheet.css";

   stylesheet.Attributes["rel"] = "stylesheet";

   stylesheet.Attributes["text"] = "text/css";

   ((System.Web.UI.Page)page).Header.Controls.Add(stylesheet);

 

 

In sostanza, nella prima parte viene ottenuta una reference alla pagina principale (.ASPX), mentre nella seconda si procede alla specificazione del file .CSS da caricare sul client.

 

L'esigenza di fare una cosa del genere potrebbe sembrare piuttosto remota, ma, al contrario, se si pensa per esempio alla necessità di incorporare un controllo di terze parti in una webpart per DotNetNuke (come nel mio caso) che magari sia closed-source e che magari richieda un particolare foglio di stile per funzionare correttamente, il codice sopra potrebbe essere di fondamentale aiuto...

 

Se qualcuno dovesse conoscere una soluzione più semplice per ottenere lo stesso risultato, si senta libero di postarla qui come risposta.