Rob*_*Rob 4 c# asp.net facebook custom-server-controls
我正在开发一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是基于UseXfbmlSemantics修改渲染 - 如果它是真的,它应该渲染,例如:
<fb:name uid="10300399458"></fb:name>Run Code Online (Sandbox Code Playgroud)
当它为假时,它应该使用自闭标签呈现:
<fb:name uid="10300399458" />Run Code Online (Sandbox Code Playgroud)
我可以让"真实"条件几乎正确地工作,但自动关闭标签似乎与Render-方法集不兼容.不幸的是,如果是这种情况,它也意味着AddAttributesToRender模式也不起作用.它实际产生的是:
<fb:name uid="10300399458">
</fb:name>
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得HtmlTextWriter(或者我需要使用哪个HtmlTextWriter)来使它呈现自闭标签?或者,至少,我怎样才能使它不呈现临时空间(以便开始和结束标签紧挨着彼此)?
由于这是搜索"HtmlTextWriter自闭标签"时出现的最重要的问题,因此这对于想要知道如何操作的人来说是这样的:
writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
Run Code Online (Sandbox Code Playgroud)
这应该让你去 - 它将呈现为<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("/>");
}
}
Run Code Online (Sandbox Code Playgroud)
-Jason
| 归档时间: |
|
| 查看次数: |
4821 次 |
| 最近记录: |