我正在开发一个Facebook FBML控件库,并希望创建我的FBML控件,有点像ASP.NET WebControls库。我有一个默认处理渲染的基类;这是我的渲染方法:
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>
当它为假时,它应该使用自动关闭标记进行渲染:
<fb:name uid="10300399458" />
我可以让“真实”条件几乎正确地工作,但是自动关闭标签似乎与Render-方法集不兼容。不幸的是,如果是这种情况,它也意味着AddAttributesToRender模式也不起作用。它实际产生的是:
<fb:name uid="10300399458">
</fb:name>
如何获取HtmlTextWriter(或者我需要使用哪个HtmlTextWriter)才能使其呈现自动关闭标记?或者,至少,我怎样才能使它不呈现临时空间(以便开始和结束标签紧挨着彼此)?
答案 0 :(得分:7)
由于这是在搜索“HtmlTextWriter自闭标签”时出现的最重要的问题,这适用于任何想要知道如何操作的人来到这里:
writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
答案 1 :(得分:6)
这应该让你去 - 它将呈现为<fb:name uid="00101010101"/>
。您还可以覆盖RenderBeginTag,RenderContents和RenderEndTag。根据您正在做的事情,您可能需要在RenderControl中进行其他一些操作。你也可以考虑使用ControlAdapter,这可能会让你更好地分离控制功能VS控制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
答案 2 :(得分:3)
我建议使用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); // "/>"
}
答案 3 :(得分:-1)
如果您使用Visual Studio,请执行以下步骤:
工具---&gt;选项---&gt;文字编辑器---&gt; HTML ----&gt;格式化---&gt; 删除自动插入关闭标记