Visual Basic.NET 7.x (2002/03)Visual Basic 8 (2005)Visual Studio .NET 2003WebForms.NET 1.1.NET 3.0Visual Studio 2005.NET 2.0中级开发Visual StudioWindows.NETVisual BasicASP.NET
不允许子控件错误






3.31/5 (13投票s)
当你创建一个继承自 System.Web.UI.WebControls.DropDownList 的自定义下拉列表,并且尝试添加控件(例如,Me.Controls.Add(myControl))时,你会收到“不允许子控件错误”。以下是解决方法。
引言
我试图创建一个继承自 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)
关注点
很简单,对吧!?如果你在继承自默认控件时遇到相同的问题,这将是解决方法。
希望这有所帮助。