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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top