Render samozavírací Tag na vlastní ovládací prvek ASP.NET odvozen od Control

hlasů
4

Pracuji na Facebooku FBML ovládá knihovnu a chcete vytvořit můj FBML řídí poněkud vzorovaný jako knihovny ASP.NET WebControls. Mám základní třídu, která zpracovává vykreslování ve výchozím nastavení; tady je můj render metoda:


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

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

Co bych chtěl, je pro renderování, které mají být modifikovány na základě UseXfbmlSemantics - jestli je to pravda, měl by poskytnout, například:

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

Když je to falešný, měl by poskytnout s vlastním uzavřením tag:

<fb:name uid=10300399458 />

Mohu dostat „true“ podmínka téměř pracovat správně, ale samo se uzavírající tag se zdá být neslučitelné s Render- souborem metod. Bohužel v případě, že je tomu tak to také znamená, že AddAttributesToRender vzor nebude fungovat, a to buď. Co je to vlastně vyrábí, je toto:


        <fb:name uid=10300399458>

        </fb:name>

Jak mohu získat HtmlTextWriter (nebo které HtmlTextWriter musím použít), aby to činí samozavírací značku? Nebo, přinejmenším, jak mohu dělat to nečiní, že prozatímní prostor (tak, aby otevírání a zavírání značky jsou hned vedle sebe)?

Položena 05/11/2008 v 23:32
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
6

To by mělo dostat jdete - to bude činit as <fb:name uid="00101010101"/>. Dalo by se také přepsat RenderBeginTag, RenderContents, RenderEndTag. V závislosti na tom, co jste tam dělal, může být některé další věci se děje v RenderControl, které budete potřebovat. Dalo by se také podívat do použitím ControlAdapter to může dát lepší oddělení funkcí řídicího versus kontrola html psaní.

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

Odpovězeno 06/11/2008 v 22:44
zdroj uživatelem

hlasů
3

Já bych doporučil použít HtmlTextWriter konstanty:

    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); // "/>"
    }
Odpovězeno 29/08/2011 v 13:41
zdroj uživatelem

hlasů
7

Jelikož se jedná o top SO otázku, která se zobrazí při hledání „HtmlTextWriter samo uzavírací značku“, to je pro každého, kdo sem přišel, že chce vědět, jak na to:

writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
Odpovězeno 12/09/2014 v 18:22
zdroj uživatelem

hlasů
-1

Pokud používáte Visual Studio jít těmito kroky:

Nástroje ---> Options ---> Textový editor ---> HTML ----> Formátování ---> odstranit Auto vložit zavřít tag

Odpovězeno 26/02/2015 v 08:37
zdroj uživatelem

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