为什么会出现“MetaTag 不允许使用子控件”这样的异常?

zahuifan 2006-07-12 09:04:03
在《ASP.Net 服务器控件与组件开发》的P103页有一个例子,简略代码如下:

[DefaultProperty("Name")]
public class MetaTag : Control
{
...

// This ensures that there are no child controls
protected override ControlCollection CreateControlCollection()
{
return new EmptyControlCollection(this);
}

...
}

书上说重载 CreateControlCollection() 函数并返回一个EmptyControlCollection实例是为了“通过不接受用户在控件中加入子控件可以保证Controls集合为空。
可是当我使用此控件时却引发了“MetaTag 不允许使用子控件”这样的异常,而将CreateControlCollection()函数删掉就没问题。

请问这是为什么?
...全文
185 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
saucer 2006-07-13
  • 打赏
  • 举报
回复
if you have spaces in between the tags, ASP.NET makes it as a literal control and tries to add it to the MetaTag's Controls collection, but that is not allowed for your control
zahuifan 2006-07-13
  • 打赏
  • 举报
回复
谢谢saucer(思归)。
在页面上写
<ste:MetaTag ID="MetaTag1" runat="server"></ste:MetaTag>

<ste:MetaTag ID="MetaTag1" runat="server" />
都是没问题的;

但是如果写成
<ste:MetaTag ID="MetaTag1" runat="server"> </ste:MetaTag>

<ste:MetaTag ID="MetaTag1" runat="server">
</ste:MetaTag>
就会引发“MetaTag 不允许使用子控件”的异常。
saucer 2006-07-12
  • 打赏
  • 举报
回复
你是不是在什么地方用了

yourMetaControl.Controls.Add(AnotherControl);

或者你的标识里有空格什么的?
<uc:MetaTag runat="server">...</uc:MetaTag>

?

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧