ASP.Net sfondo errato stile ha reso l'immagine
-
22-09-2019 - |
Domanda
Utilizzando ASP.Net, ho un controllo server per il quale vorrei aggiungere il "background-image: none" in linea css stile. Tuttavia, quando chiamo:
writer.AddStyleAttribute("background-image", "none");
viene generato il seguente stile in linea (e tenta di risolvere l'url "none"):
background-image:url(none)
C'è una sintassi speciale che posso usare per impostare l'immagine di sfondo a nessuno in linea?
Soluzione
Guardando il codice per le classi HTMLTextWriter
e CssTextWriter
in .NET Reflector, l'unica cosa che posso pensare è subclassing HTMLTextWriter
te stesso.
"Binary non è il primo elemento della enum stile", ~HtmlTextWriterStyle.BackgroundColor
, è quello che usa per qualsiasi stile il cui nome non riconosce, e quindi non si preoccupa di verificare se le esigenze di valore avvolti in "url () "quando in realtà è scritto fuori.
HtmlTextWriterEx
non è il più grande nome, ma qualunque cosa. (?) A seconda di quello che stai facendo, potrebbe essere necessario fare qualcosa di simile nel code-behind System.Web.UI.Page
sottoclasse:
protected override HtmlTextWriter CreateHtmlTextWriter(TextWriter writer)
{
return new HtmlTextWriterEx(writer);
}
Ed ecco la classe:
class HtmlTextWriterEx : HtmlTextWriter
{
public HtmlTextWriterEx(TextWriter writer)
: this(writer, "\t")
{
}
public HtmlTextWriterEx(TextWriter writer, string tabString)
: base(writer, tabString)
{
}
public override void AddStyleAttribute(string name, string value)
{
if (name.ToLower() == "background-image" && value.ToLower() == "none")
base.AddStyleAttribute(name, value, ~HtmlTextWriterStyle.BackgroundColor);
else
base.AddStyleAttribute(name, value);
}
public override void AddStyleAttribute(HtmlTextWriterStyle key, string value)
{
if(key == HtmlTextWriterStyle.BackgroundImage && value.ToLower() == "none")
base.AddStyleAttribute("background-image", value, ~HtmlTextWriterStyle.BackgroundColor);
else
base.AddStyleAttribute(key, value);
}
}
Altri suggerimenti
Si potrebbe provare ad aggiungere una classe CSS alla tua pagina come
.noimage { background-image: none; }
Poi, invece di aggiungere l'attributo di stile nel codice dietro si potrebbe aggiungere il CssClass.