簡體   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