2012-06-19 112 views
1

我想在ASP.NET中創建一個新的服務器控件類型。這個控件會把RequiredFieldValidator放到某個地方。我的類繼承自WebControl類,它有一個ControlID屬性,它是給定控件的ID。 RequiredFieldValidator將在具有給定ControlID的控件附近生成。但是,ControlID的值是什麼都沒有。在哪些事件中我可以成功使用此屬性?爲什麼ASP.NET服務器控件屬性什麼都沒有

Public Class MyControl 
    Inherits WebControl 

    '... 
    Protected Property ControlID As String 
    Protected Property IsLinkedBrother As Boolean = False 
    '... 

    Protected Overrides Sub OnPreRender(e as System.EventArgs) 
     MyBase.OnPreRender(e) 
     Dim rootControl = If(IsLinkedBrother, Parent, Page) 
     Dim controls As Stack(Of Control) = New Stack(Of Control) 
     Dim currentControl As Control = Nothing 
     controls.Push(rootControl) 
     Dim result As Control = Nothing 
     While ((result Is Nothing) AndAlso (controls.Count > 0)) 
      currentControl = controls.Pop 
      If ((Not String.IsNullOrEmpty(currentControl.ID)) AndAlso (currentControl.ID.Equals(ControlID))) Then 
       result = currentControl 
      Else 
       For Each child As System.Web.UI.Control In currentControl.Controls 
        controls.Push(child) 
       Next 
      End If 
     End While 
     '... 
    End Sub 
'... 
End Class 

但是由於某種原因,ControlID是Nothing,並且該事件會引發異常。控件ID初始化後,從來沒有改變過,它被初始化這樣:

<MyControl runat="server" ID="IDValue" ControlID="ControlIDValue" EnableCliendScript="true" 
    CssClass="Whatever" Display="Dynamic" /> 

我搜索並嘗試了幾個小時,但沒有運氣。任何人都可以告訴我什麼會導致這種行爲,爲什麼有人對解決方案有一些建議?預先感謝您

回答

2

ControlID必須公開才能正常工作;它不能被保護,並能夠從標記中設置。

+0

謝謝Brian,我目前正在構建我的項目來測試這個,非常感謝。我會盡快寫下結果。 –

相關問題