65.9K
CodeProject 正在变化。 阅读更多。
Home

不允许子控件错误

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.31/5 (13投票s)

2007年8月16日

CPOL

1分钟阅读

viewsIcon

42525

downloadIcon

226

当你创建一个继承自 System.Web.UI.WebControls.DropDownList 的自定义下拉列表,并且尝试添加控件(例如,Me.Controls.Add(myControl))时,你会收到“不允许子控件错误”。以下是解决方法。

Screenshot - does-not-allow-child-controls.gif

引言

我试图创建一个继承自 DropDownList 的自定义控件,并带有必填字段验证。我的本意是在我的自定义下拉列表控件中嵌入 RequiredFieldValidator,这样当我将下拉列表添加到 ASPX 页面时,就不必每次都重新编写 RequiredFieldValidator

当我尝试将必填字段验证器作为下拉列表的子控件添加时,我收到了如图所示的“不允许子控件”错误消息。看来默认的下拉列表不允许添加子控件。

Using the Code

我在编程时一直秉持一个原则:“应用程序中最大的错误通常是由最容易修复的部分引起的”。我昨天花了好几个小时来解决这个问题,猜猜怎么着……解决方法非常非常简单!就是这样。代码使用 VB.NET。

你所需要做的就是重写基类的 CreateControlCollection 方法,创建一个新的实例并传递当前类(VB.NET 中为 Me,C# 中为 this)。

''' <summary>
''' Override the CreateControlCollection to overcome the "does not allow child controls".
''' </summary>
''' <returns></returns>
''' <remarks></remarks>

Protected Overrides Function CreateControlCollection() As System.Web.UI.ControlCollection
    Return New ControlCollection(Me)
End Function

就是这样!然后你可以执行以下操作

MyBase.Controls.Add(ctrValidator)

关注点

很简单,对吧!?如果你在继承自默认控件时遇到相同的问题,这将是解决方法。

希望这有所帮助。

© . All rights reserved.