首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在从控件派生的ASP.NET自定义控件中呈现自关闭标记

在从控件派生的ASP.NET自定义控件中呈现自关闭标记
EN

Stack Overflow用户
提问于 2008-11-05 22:32:53
回答 4查看 5.1K关注 0票数 4

我正在做一个Facebook的FBML控件库,我想创建我的FBML控件,有点像ASP.NET的WebControls库。我有一个默认处理渲染的基类;下面是我的render方法:

代码语言:javascript
运行
复制
        protected override void Render(HtmlTextWriter writer)
        {
            AddAttributesToRender(writer);

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

我想要的是基于UseXfbmlSemantics修改渲染--如果这是真的,它应该渲染,例如:

代码语言:javascript
运行
复制
<fb:name uid="10300399458"></fb:name>

当它为false时,它应该用一个自动结束标记来呈现:

代码语言:javascript
运行
复制
<fb:name uid="10300399458" />

我可以让"true“条件几乎正确地工作,但自关闭标记似乎与呈现方法集不兼容。不幸的是,如果是这样的话,这也意味着AddAttributesToRender模式也不能工作。它实际产生的是这样的:

代码语言:javascript
运行
复制
        <fb:name uid="10300399458">

        </fb:name>

怎样才能让HtmlTextWriter (或者我需要使用哪个HtmlTextWriter )使它呈现一个自动结束标记?或者,至少,我如何才能使它不呈现那个临时空间(这样开始和结束标记就会紧跟在一起)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-06 21:44:33

这应该可以让您继续-它将呈现为<fb:name uid="00101010101"/>。您还可以覆盖RenderBeginTag、RenderContents、RenderEndTag。根据您所做的工作,RenderControl中可能还会发生一些您需要的其他事情。你也可以考虑使用ControlAdapter,这可能会让你更好地分离控件功能和控件html编写。

代码语言:javascript
运行
复制
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

票数 6
EN

Stack Overflow用户

发布于 2014-09-13 01:22:35

由于这是搜索"HtmlTextWriter self closing tag“时出现的第一个问题,所以这是给任何想要知道如何做的人准备的:

代码语言:javascript
运行
复制
writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
票数 9
EN

Stack Overflow用户

发布于 2011-08-29 20:41:26

我建议使用HtmlTextWriter常量:

代码语言:javascript
运行
复制
    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); // "/>"
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/266988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档