Como el control de usuario no pertenece a la página, no puede acceder directamente a menos que establezca explícitamente una propiedad en el control de usuario desde la página incluida o cree una función recursiva que recorre todos los objetos principales hasta que encuentre un objeto del tipo System.Web.UI.Page
.
Para el primero, se podría utilizar una propiedad (he hecho esto usando una propiedad llamada ParentForm
) en el control de usuario:
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
En la página "padre", se debe establecer esta propiedad en un evento tan temprano como sea posible. Prefiero usar PreLoad porque viene antes de la carga (por lo tanto, está disponible cuando la mayoría de los otros controles lo necesitarían) y después de la inicialización.
Protected Sub Page_PreLoad(ByVal sender as Object, ByVal e as EventArgs) Handles Me.PreLoad
Me.myUserControlID.ParentForm = Me
End Sub
También puede escribir una función trolls a través de los controles principales para buscar la página. El código siguiente no se ha probado, por lo que puede requerir ajustes, pero la idea es sonido.
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
EDIT: También no se puede acceder a este inmueble directamente, ya que no existe dentro del tipo System.Web.UI.Page
. Como recomienda @Tim Schmelter, puede intentar enviar la página al tipo de página específico _Default
o si esto es algo común en muchas de sus páginas, puede que necesite crear una clase de página base e incluir su propiedad en esa clase. A continuación, puede heredar esta clase en lugar de System.Web.UI.Page
Public Class MyBasePage
Inherits System.Web.UI.Page
Public Property SelectedID() as Integer
...
End Property
End Class
Luego, en la página:
Partial Class _Default
Inherits MyBasePage
...
End Class
Gracias Tim, tomé su consejo. ¡Agregué una propiedad pública a mi control y la configuré desde la página cuando la agregué dinámicamente! – s15199d