2010-04-14 8 views
6

Ho un controllo personalizzato e voglio inserire dinamicamente un collegamento a un foglio di stile.Aggiunta dinamica di un file CSS da un controllo server ASP.NET

Potrebbe non essere la soluzione migliore dell'anno ma deve essere fatta. Qualche idea su come farlo?

Ogni volta che provo, Page.Header è nullo.

+0

A che punto del ciclo di vita della pagina stai tentando di accedere a PageHeader? –

risposta

17

Ecco come si farebbe normalmente aggiungere un CSS programatically:

protected void Page_Init(object sender, EventArgs e) 
{ 
    var link = new HtmlLink(); 
    link.Href = "~/styles/main.css"; 
    link.Attributes.Add("rel", "stylesheet"); 
    link.Attributes.Add("type", "text/css"); 
    Page.Header.Controls.Add(link); 
} 

Potrebbe essere necessario mettere un runat="server" nel tag head:

<head runat="server"> 
    <title>Add CSS example</title> 
</head> 
+0

Capito. Mi mancava il Runat = "Server" nel tag header della mia masterpage. :) Grazie! –

+1

Non sarebbe un problema se si è aggiunto il controllo, per esempio, 10 volte nella tua pagina? Quindi il file CSS verrebbe collegato 10 volte. – Peter

+0

@Peter, sì, immagino che sarebbe problematico. –

7

per evitare il problema di più fogli di stile quando si aggiunge il controlla 10 volte la pagina, cambia leggermente il codice sopra:

string styleSheet = "stylesheetName.css"; 
if (this.Page.Header.FindControl(styleSheet) == null) 
{ 
    HtmlLink cssLink = new HtmlLink(); 
    cssLink.ID = styleSheet; 
    cssLink.Href = "~/styles/" + styleSheet; 
    cssLink.Attributes.Add("rel", "stylesheet"); 
    cssLink.Attributes.Add("type", "text/css"); 
    this.Page.Header.Controls.Add(cssLink); 
} 

Dando al controllo un ID è possibile verificare se esiste già, e quindi assicurarsi di aggiungerlo solo una volta.

Problemi correlati