我正在做一个Facebook的FBML控件库,我想创建我的FBML控件,有点像ASP.NET的WebControls库。我有一个默认处理渲染的基类;下面是我的render方法:
protected override void Render(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
if (UseXfbmlSemantics)
{
writer.RenderBeginTag(ElementName);
writer.EndRender();
writer.RenderEndTag();
}
else
{
writer.RenderBeginTag(ElementName);
writer.RenderEndTag();
}
}我想要的是基于UseXfbmlSemantics修改渲染--如果这是真的,它应该渲染,例如:
<fb:name uid="10300399458"></fb:name>当它为false时,它应该用一个自动结束标记来呈现:
<fb:name uid="10300399458" />我可以让"true“条件几乎正确地工作,但自关闭标记似乎与呈现方法集不兼容。不幸的是,如果是这样的话,这也意味着AddAttributesToRender模式也不能工作。它实际产生的是这样的:
<fb:name uid="10300399458">
</fb:name>怎样才能让HtmlTextWriter (或者我需要使用哪个HtmlTextWriter )使它呈现一个自动结束标记?或者,至少,我如何才能使它不呈现那个临时空间(这样开始和结束标记就会紧跟在一起)?
发布于 2008-11-06 21:44:33
这应该可以让您继续-它将呈现为<fb:name uid="00101010101"/>。您还可以覆盖RenderBeginTag、RenderContents、RenderEndTag。根据您所做的工作,RenderControl中可能还会发生一些您需要的其他事情。你也可以考虑使用ControlAdapter,这可能会让你更好地分离控件功能和控件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
发布于 2014-09-13 01:22:35
由于这是搜索"HtmlTextWriter self closing tag“时出现的第一个问题,所以这是给任何想要知道如何做的人准备的:
writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);发布于 2011-08-29 20:41:26
我建议使用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); // "/>"
}https://stackoverflow.com/questions/266988
复制相似问题