2009-02-25 8 views
6

Devo aggiungere alla pagina da un controllo personalizzato. Non posso usare un foglio di stile (.css) perché sto usando un URL (...) e ho bisogno di risolvere l'url.ASP.NET 2.0 aggiunge stili dinamicamente alla pagina in un controllo

In questo momento sto facendo:

Page.Header.Controls.Add(new LiteralControl("<style type='text/css'>.xyz { color: blue; }</style>")); 

Ma spero in qualcosa di un tocco più elegante?

risposta

3

Immagino non sia una cattiva soluzione per il problema. Se tu avessi un file di foglio di stile esterno , questo pezzo di codice farà il lavoro:

HtmlLink cssRef = new HtmlLink(); 
cssRef.Href = "styles/main.css"; 
cssRef.Attributes["rel"] = "stylesheet"; 
cssRef.Attributes["type"] = "text/css"; 
Page.Header.Controls.Add(cssRef); 

Un'altra idea è quella di scrivere il proprio ASP.NET ServerControl "HtmlInlineStyle", così si potrebbe chiamare in questo modo (tag di script sarà fatta per il vostro controllo server):

Page.Header.Controls.Add(
    New HtmlInlineStyle(".xyz { width:300px;padding-left:10px }"); 

Questo blog entry ei commenti mostrano alcune alternative (ScriptManager.RegisterClientScriptBlock). Ma a mio parere la tua soluzione va bene.

+0

cos'è HtmlInlineStyle? Non riesco a trovare questa classe. –

+0

@AntonPutov Non esiste una classe di questo tipo nel framework .NET. Era un suggerimento scrivere il proprio controllo server. – splattne

1

Ecco un altro modo ... Per esempio:

Parent

ASPX porzione:

<div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
    <span>abc</span> 
</div> 

All'interno del Control:

Dim xyzStyle As New Style() 
xyzStyle.CssClass = "xyz" 
xyzStyle.BackColor = Drawing.Color.LightBlue 
Page.Header.StyleSheet.CreateStyleRule(xyzStyle, Nothing, ".xyz") 

Si noti che questo presuppone che la pagina padre ASPX ha la attributo di classe impostato per il controllo target. In caso contrario, sarà necessario unire lo stile con il controllo utilizzando il metodo MergeStyle. (Ciò richiede che il controllo sia runat="server").

Questo codice rende il seguente output: (da tutta la fonte per la vostra convenienza)

<html> 
<head> 
    <title>Untitled Page </title> 
    <style type="text/css"> 
    .xyz { background-color:LightBlue; } 
    </style> 
</head> 
<body> 
    <form name="form1" method="post" action="MyPage.aspx" id="form1"> 
    <div id="div1" class="xyz" style="width: 40px; height: 40px;"> 
     <span>abc</span> 
    </div> 
    </form> 
</body> 
</html> 
+1

Sì ... Ho trovato il CreateStyleRule ma ero davvero seccato nel vedere che non forniva un modo per fornire un'ulteriore impostazione di "stili" per le stringhe. Gli attributi di stile di cui ho bisogno non sono in gran parte parte dell'oggetto Style(). – user53794

+0

Hmmm ... giustissimo. Non ho trovato un modo per aggirare questo problema. – Cerebrus

0

creo la mia classe ed ereditare stile, con il mio proprio dizionario per gli attributi che la classe di stile di default non comprende. Ecco un breve esempio ...

   protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) 
    { 
     Dictionary<String, String> _styles = new Dictionary<string, string>(); 
     _styles.Add("display", "inline-block"); 
     foreach (String s in _styles.Keys) 
     { 
      attributes[s] = (String)_styles[s]; 
     } 
     base.FillStyleAttributes(attributes, urlResolver); 
    }