繁体   English   中英

获得“值”的简单自定义服务器控件不能为空。 参数名称:child'

[英]Simple Custom Server Control getting 'Value cannot be null. Parameter name: child'

构建我的第一个服务器控件。 在代码中指示的点上,在调试中获取“值不能为空。参数名称:child”错误。 文本框已创建,然后在调用父级的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

我以前没有做过,但最上面您说的是DefaultValue(True); 这是否意味着它必须具有默认值? 也许如果您将默认值设置为OnInit(或将prop设置为false)。

好的,这就是我的工作方式。

我基本上将OnInit代码移到CreateChildControls ... duh中! 我创建了一个函数(buildForm),该函数在一个步骤中声明并添加所有控件,如下所示。

 Protected Overrides Sub CreateChildControls()
    buildForm()
    If HasChildViewState Then
        ClearChildViewState()
    End If
    MyBase.CreateChildControls()
 End Sub

SIDEBAR:Web用户控件与自定义服务器控件在过去的4-5天中,我比较并试验了这两个控件。 这些年来,我做了很多用户控制,只是将它们复制到了应用程序中。 讨厌创建的维护。

我花了一整天的时间试图将当前的Web控件编译成单个dll,可以像服务器控件那样使用它。 我发现这很乏味且有限。

包括MSDN在内的许多文章都让我害怕服务器控件,因为它比Web控件更难创建。 我可以说...到目前为止,我正在研究服务器控件。 我希望我一开始就这样做。 真正的重用。 不要担心服务器控制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM