Tag Render a chiusura automatica controllo personalizzato ASP.NET derivata da Control

voti
4

Sto lavorando su un Facebook FBML controlla biblioteca e vorrei creare la mia FBML controlli un po 'modellato come la biblioteca ASP.NET WebControls. Ho una classe di base che gestisce il rendering di default; ecco il mio metodo render:


        protected override void Render(HtmlTextWriter writer)
        {
            AddAttributesToRender(writer);

            if (UseXfbmlSemantics)
            {
                writer.RenderBeginTag(ElementName);
                writer.EndRender();
                writer.RenderEndTag();
            }
            else
            {
                writer.RenderBeginTag(ElementName);
                writer.RenderEndTag();
            }
        }

Quello che vorrei è per il rendering da modificare sulla base di UseXfbmlSemantics - se è vero, si dovrebbe rendere, per esempio:

<fb:name uid=10300399458></fb:name>

Quando è falso, dovrebbe rendere con un tag di chiusura automatica:

<fb:name uid=10300399458 />

Posso ottenere la vera condizione di lavorare quasi in modo corretto, ma il tag di chiusura automatica sembra essere incompatibile con il set Render- di metodi. Purtroppo, se questo è il caso significa anche che il modello AddAttributesToRender non avrebbe funzionato, neanche. Che in realtà è la produzione è questo:


        <fb:name uid=10300399458>

        </fb:name>

Come posso ottenere HtmlTextWriter (o che HtmlTextWriter ho bisogno di usare) per renderlo rendere un tag di chiusura automatica? O, per lo meno, come posso farlo non rende quello spazio intermedio (in modo che i tag di apertura e chiusura sono subito l'uno accanto all'altro)?

È pubblicato 05/11/2008 alle 23:32
fonte dall'utente
In altre lingue...                            


4 risposte

voti
6

Questo dovrebbe farti andare - è renderà come <fb:name uid="00101010101"/>. Si potrebbe anche ignorare le RenderBeginTag, RenderContents, RenderEndTag. A seconda di cosa si sta facendo ci possono essere alcune altre cose in corso in RenderControl cui avete bisogno. Si potrebbe anche considerare di usare un ControlAdapter, questo può dare una migliore separazione delle funzionalità di controllo VS scrittura controllo HTML.

public  class FbName:System.Web.UI.WebControls.WebControl
{

    protected override string TagName
    {
        get
        {
            return "fb:name";
        }
    }

    public override void RenderControl(HtmlTextWriter writer)
    {  
        RenderBeginTag(writer);// render only the begin tag.
        //base.RenderContents(writer);
        //base.RenderEndTag(writer);
    }

    public override void RenderBeginTag(HtmlTextWriter writer)
    {
        writer.Write("<" + this.TagName);
        writer.WriteAttribute("uid", "00101010101");
        writer.Write("/>");

    }
}

-Jason

Risposto il 06/11/2008 a 22:44
fonte dall'utente

voti
3

Mi consiglia di utilizzare le costanti HtmlTextWriter:

    protected override void Render(HtmlTextWriter writer)
    {
        AddAttributesToRender(writer);
        writer.Write(HtmlTextWriter.TagLeftChar); // '<'
        writer.Write(this.TagName);
        writer.Write(HtmlTextWriter.SpaceChar); // ' '
        writer.WriteAttribute("uid", "00101010101");
        writer.Write(HtmlTextWriter.SpaceChar); // ' '
        writer.Write(HtmlTextWriter.SelfClosingTagEnd); // "/>"
    }
Risposto il 29/08/2011 a 13:41
fonte dall'utente

voti
7

Dal momento che questo è il top SO domanda che viene in su durante la ricerca di "HtmlTextWriter tag di chiusura di sé", questo è per chi viene qui che vuole sapere come fare:

writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
Risposto il 12/09/2014 a 18:22
fonte dall'utente

voti
-1

Se si utilizza Visual Studio passare alla seguente procedura:

Strumenti ---> Opzioni ---> Editor di testo ---> HTML ----> Formattazione ---> rimuovere inserimento automatico tag di chiusura

Risposto il 26/02/2015 a 08:37
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more