为什么会出现“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()函数删掉就没问题。

请问这是为什么?
...全文
166 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过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>

?
  • 打赏
  • 举报
回复
相关推荐
发帖
组件/控件开发

8839

社区成员

.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
帖子事件
创建了帖子
2006-07-12 09:04
社区公告
暂无公告