因爲用戶控件不屬於該頁面,所以不能直接訪問它,除非您直接在包含頁面的usercontrol中設置一個屬性,或者創建一個循環遍歷所有父對象的遞歸函數直到找到System.Web.UI.Page
類型的對象。
對於第一個,你可以使用屬性在用戶控件(我使用了一個名爲ParentForm
物業這樣做):
Private _parentForm as System.Web.UI.Page
Public Property ParentForm() As System.Web.UI.Page ' or the type of your page baseclass
Get
Return _parentForm
End Get
Set
_parentForm = value
End Set
End Property
在「父母」頁面,你會設置該屬性的儘可能早的事件。我更喜歡使用PreLoad,因爲它在加載之前(因此在大多數其他控件需要它時可用)和init之後。
Protected Sub Page_PreLoad(ByVal sender as Object, ByVal e as EventArgs) Handles Me.PreLoad
Me.myUserControlID.ParentForm = Me
End Sub
你也可以編寫一個函數通過父控件來控制尋找頁面。以下代碼未經測試,因此可能需要調整,但這個想法很有道理。
Public Shared Function FindParentPage(ByRef ctrl As Object) As Page
If "System.Web.UI.Page".Equals(ctrl.GetType().FullName, StringComparison.OrdinalIgnoreCase) Then
Return ctrl
Else
Return FindParentPage(ctrl.Parent)
End If
End Function
編輯:您還因爲它沒有類型System.Web.UI.Page
中存在不能直接訪問該屬性。正如@Tim Schmelter建議的那樣,您可以嘗試將頁面轉換爲特定的頁面類型_Default
,或者如果這對於許多頁面來說都是常見的,則可能需要創建基本頁面類並將該屬性包含在該類中。然後,你可以在頁面繼承這個類而不是System.Web.UI.Page
Public Class MyBasePage
Inherits System.Web.UI.Page
Public Property SelectedID() as Integer
...
End Property
End Class
然後:
Partial Class _Default
Inherits MyBasePage
...
End Class
感謝蒂姆,我把你的建議。我添加了一個公共屬性到我的控件中,並在我動態添加它時從頁面中設置了該屬性! – s15199d 2010-11-04 15:06:08