Asp.net 简单自定义服务器控件“”的值不能为null。参数名称:child's
构建我的第一个服务器控件。获取值不能为null。参数名称:在代码中指示的点处调试中的子错误。文本框被创建,然后在调用父级的page_load事件时变为空。page_load事件在我的控件中的OnInit和CreateChildControls之间激发。很难找到例子Asp.net 简单自定义服务器控件“”的值不能为null。参数名称:child's,asp.net,custom-server-controls,servercontrols,Asp.net,Custom Server Controls,Servercontrols,构建我的第一个服务器控件。获取值不能为null。参数名称:在代码中指示的点处调试中的子错误。文本框被创建,然后在调用父级的page_load事件时变为空。page_load事件在我的控件中的OnInit和CreateChildControls之间激发。很难找到例子 Public Class ContactForm Inherits WebControl #Region "Local variables" Private _ShowFirstName As Boolean Private tbF
Public Class ContactForm
Inherits WebControl
#Region "Local variables"
Private _ShowFirstName As Boolean
Private tbFirstName As TextBox
#End Region
<Browsable(True), _
Bindable(True), _
Category("Appearance"), _
DefaultValue(True), _
Localizable(True), _
Description("Show First Name field")> _
Public Property ShowFirstName() As Boolean
Get
Return _ShowFirstName
End Get
Set(value As Boolean)
_ShowFirstName = value
End Set
End Property
Protected Overrides Sub OnInit(e As EventArgs)
If ShowFirstName = True Then
Dim tbFirstName As New TextBox
tbFirstName.ID = "tbFirstName"
tbFirstName.MaxLength = 30
tbFirstName.Text = "IM HERE"
End If
MyBase.OnInit(e)
End Sub
<<<<< --- NOTE: The Page_Load event of the parent fires here ->>>>>
Protected Overrides Sub CreateChildControls()
Me.Controls.Add(tbFirstName) <<---Error: Value cannot be null. Parameter name: child
If HasChildViewState Then
ClearChildViewState()
End If
MyBase.CreateChildControls()
End Sub
End Class
我以前没有这样做过,但在最高层,你说,这是真的;这是否意味着它必须有一个默认值?如果您将默认值设置为OnInit或将道具设置为false 好的,这是我如何让它工作的 我基本上把OnInit代码移到了CreateChildControls中…呸! 我创建了一个函数buildForm,它在一个步骤中声明并添加所有控件,如下所示
Protected Overrides Sub CreateChildControls()
buildForm()
If HasChildViewState Then
ClearChildViewState()
End If
MyBase.CreateChildControls()
End Sub
侧栏:Web用户控件与自定义服务器控件
在过去的4-5天里,我对这两种对照进行了比较和实验。多年来,我做了很多用户控件,只是将它们复制到应用程序中。我讨厌造成这种情况的维修
我花了一整天的时间试图将我当前的web控件编译成一个dll,可以像服务器控件一样使用。我觉得它既乏味又有限
包括MSDN在内的许多文章都让我害怕服务器控件,说它比web控件更难创建。我可以说…到目前为止…我正在挖掘服务器控件。我要是一开始就这么做就好了。真正的重用。不要害怕服务器控件。我尝试了t|F和no value。在调试中,我可以看到文本框创建正确。尽管在CreateChildControls事件触发时它是一个局部变量,但它还是会以某种方式被删除。