渲染ASP.NET中的自定义控件自定义控件派生自控制
我正在研究Facebook FBML控件库,并且想创建一些像ASP.NET WebControls库一样的FBML控件。我有一个默认处理渲染的基类;这里是我的渲染方法:渲染ASP.NET中的自定义控件自定义控件派生自控制
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-集实现方法具不兼容DS。不幸的是,如果是这种情况,那么也意味着AddAttributesToRender模式也不起作用。什么它实际上生产是这样的:
<fb:name uid="10300399458">
</fb:name>
我怎样才能获得的HtmlTextWriter(或HtmlTextWriter的做我需要使用),使其呈现自动关闭标签?或者,至少我怎样才能让它不呈现临时空间(以便开始和结束标记紧挨着)?
这应该让你走 - 它会渲染为<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
我建议你使用的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); // "/>"
}
因为这是顶级SO质疑为 “自HtmlTextWriter的结束标记” 进行搜索时出现,这对于任何想来知道该怎么做的人来说:
writer.WriteBeginTag("tag");
writer.WriteAttribute("attribute", "attribute value");
// ... add other attributes here ...
writer.Write(HtmlTextWriter.SelfClosingTagEnd);
如果你使用Visual Studio去按下列步骤操作:
工具--->选项 - >文本编辑器 - > HTML ---->格式化---> 删除自动插入结束标记
为什么?这并不比我的示例代码更紧凑,它也没有真正解决我所问的问题。 – Rob 2011-08-30 05:55:49