Render Self-Closing Tag in ASP.NET custom control afgeleid van controle

stemmen
4

Ik ben bezig met een Facebook FBML controleert bibliotheek en wil graag creëer mijn FBML controles enigszins patroon als de ASP.NET WebControls bibliotheek. Ik heb een basis klasse die rendering handvatten standaard; hier is mijn maken methode:


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

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

Wat ik zou willen is voor de weergave worden aangepast op basis van UseXfbmlSemantics - als het waar is, moet het terug te geven, bijvoorbeeld:

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

Als het onwaar is, moet het te maken met een zelfsluitende tag:

<fb:name uid=10300399458 />

Ik kan de ware toestand tot bijna goed werken, maar de zelfsluitende tag lijkt onverenigbaar met de Renderen- reeks methoden te zijn. Helaas als dat het geval is, betekent ook dat de AddAttributesToRender patroon niet zou werken, ook niet. Wat het is in feite de productie is dit:


        <fb:name uid=10300399458>

        </fb:name>

Hoe kan ik HtmlTextWriter (of die HtmlTextWriter heb ik nodig om te gebruiken) om het maken van een zelfsluitende tag? Of, op zijn minst, hoe kan ik het niet maken dat interim-ruimte (zodat het openen en sluiten tags zijn direct naast elkaar)?

De vraag is gesteld op 05/11/2008 om 23:32
bron van user
In andere talen...                            


4 antwoorden

stemmen
6

Dit moet je heen gaat - het zal maken als <fb:name uid="00101010101"/>. Je zou ook kunnen overschrijven de RenderBeginTag, RenderContents, RenderEndTag. Afhankelijk van wat je daar aan het doen zijn, worden een aantal andere dingen gaande in RenderControl die je nodig hebt. U kunt ook kijken naar het gebruik van een ControlAdapter kan dit u een betere scheiding van controle functionaliteit VS controle html schriftelijk geven.

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

antwoordde op 06/11/2008 om 22:44
bron van user

stemmen
3

Ik zou aanraden aan HtmlTextWriter constanten:

    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); // "/>"
    }
antwoordde op 29/08/2011 om 13:41
bron van user

stemmen
7

Aangezien dit is de top SO vraag die opkomt bij het zoeken naar "HtmlTextWriter zelfsluitende tag", dit is voor iedereen hier te komen die wil weten hoe dit te doen:

writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
antwoordde op 12/09/2014 om 18:22
bron van user

stemmen
-1

als je Visual Studio gaan door de volgende stappen:

Gereedschappen ---> Opties ---> Text Editor ---> HTML ----> opmaak ---> verwijderen Auto te voegen dicht tag

antwoordde op 26/02/2015 om 08:37
bron van user

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