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" />
我搜索並嘗試了幾個小時,但沒有運氣。任何人都可以告訴我什麼會導致這種行爲,爲什麼有人對解決方案有一些建議?預先感謝您
謝謝Brian,我目前正在構建我的項目來測試這個,非常感謝。我會盡快寫下結果。 –