很多教程中都提到可以重写TagKey来实现自定义控件的输出标签,而且也提到重写TagName可以实现TagKey不包含的标签。但是经过试验发现重写TagName并不能办到实现自定义标签。研究了一下发现RenderBeginTag方法是这样定义的:
public virtual void RenderBeginTag(HtmlTextWriter writer)
{
AddAttributesToRender(writer);
if (TagKey != HtmlTextWriterTag.Unknown)
writer.RenderBeginTag(TagKey);
else
writer.RenderBeginTag(this.TagName);
}
这下明白了,只有当TagKey被重写为HtmlTextWriterTag.Unknown的时候才能输出自定义标签,所以,重写TagName属性时也要重写TagKey属性
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Unknown;
}
}
protected override string TagName
{
get
{
return "tttt";
}
}
这样就可以输出<tttt id="servercontrol1"></tttt>这样的标签了。