ASP.NET で新しいサーバー コントロール タイプを作成しようとしています。このコントロールは、RequiredFieldValidator を特定の場所に配置します。私のクラスは WebControl クラスから継承し、特定のコントロールの ID である ControlID プロパティを持っています。RequiredFieldValidator は、指定された ControlID を持つコントロールの近くに生成されます。ただし、ControlID の値は何もありません。このプロパティを正常に使用できるイベントは何ですか?
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 であり、イベントが例外をスローします。ControlID は初期化後に変更されることはなく、次の方法で初期化されます。
<MyControl runat="server" ID="IDValue" ControlID="ControlIDValue" EnableCliendScript="true"
CssClass="Whatever" Display="Dynamic" />
何時間も検索して試しましたが、うまくいきませんでした。この動作の原因とその理由を誰か教えてもらえますか?解決策の提案はありますか? 前もって感謝します