Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 简单自定义服务器控件“”的值不能为null。参数名称:child's_Asp.net_Custom Server Controls_Servercontrols - Fatal编程技术网

Asp.net 简单自定义服务器控件“”的值不能为null。参数名称:child's

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

构建我的第一个服务器控件。获取值不能为null。参数名称:在代码中指示的点处调试中的子错误。文本框被创建,然后在调用父级的page_load事件时变为空。page_load事件在我的控件中的OnInit和CreateChildControls之间激发。很难找到例子

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事件触发时它是一个局部变量,但它还是会以某种方式被删除。