Pregunta

Estoy trabajando en un Cliente de Servidor de Control que se extiende a otro control.No hay ningún problema con la fijación de otros controles en el formulario.

en vb.net: Parent.FindControl(TargetControlName)

Me gustaría pasar un método para el control en el ASPX marcado.

por ejemplo: <c:MyCustomerControl runat=server InitializeStuffCallback="InitializeStuff">

Así, traté de utilizar la reflexión para acceder al método dado el nombre de los Padres.

Algo así como (en VB)

Dim pageType As Type = Page.GetType
Dim CallbackMethodInfo As MethodInfo = pageType.GetMethod( "MethodName" )

'Also tried 
sender.Parent.GetType.GetMethod("MethodName")
sender.Parent.Parent.GetType.GetMethod("MethodName")

El método no se encuentra, porque simplemente no se aparte de la Página.Donde debo buscar?Estoy bastante seguro de que esto es posible porque he visto otros controles similares.


Me olvidé de mencionar, mi trabajo es dar el control de los eventos y unir a ellos en el Código subyacente.

¿Fue útil?

Solución

Si usted quiere ser capaz de pasar a un método en el ASPX marcado, es necesario utilizar el Browsable atributo en el código en el evento.

VB.NET

<Browsable(True)> Public Event InitializeStuffCallback

C#

[Browsable(true)]
public event EventHandler InitializeStuffCallback;

Referencia:Atributos de Tiempo de diseño para los Componentes y BrowsableAttribute Clase

Todos los eventos, propiedades, o lo que sea necesario para estar en el código-detrás del control con el navegables atributo de hacer lo que puede cambiar en el código de la etiqueta.

Otros consejos

Normalmente no se necesita para obtener el método a través de la reflexión.Dentro de su control de usuario, definir un evento público (lo siento, no sé el vb de la sintaxis por lo que esta será en c#)

public event EventHandler EventName;

Ahora, dentro de la página aspx, o cualquier contenedor del control de usuario, definir un método protegido que coincide con el EventHandler:

protected void MyCustomerControl_MethodName(object sender, EventArgs e) { }

Ahora, dentro de su margen de beneficio, usted puede utilizar

<c:MyCustomerControl id="MyCustomerControl" runat=server OnEventName="MyCustomerControl_MethodName">

Su solución es en realidad la mejor respuesta.Si usted tiene el código que debe ejecutar en una cierta parte de su control sobre el ciclo de vida, que debe exponer eventos para permitir que el contenedor de ampliar el ciclo de vida con funcionalidad personalizada.

buyutec y Jesse Dearing, ambos tienen una respuesta aceptable.

[Browsable(true)]  

le permite ver la propiedad en la ventana Propiedades.Sin embargo, el evento no se muestra, que no hace ninguna diferencia para mí.

Lo he pasado por alto antes era el hecho de que cuando se hace referencia a un control incluso de la etiqueta, se prep-termina.

Cada ASP.NET la página es de su propia clase heredado de Page como en:

class MyPage : Page

Por lo tanto, encontrar que el método a través de la Reflexión, usted debe obtener el tipo correcto, que es el tipo de la clase de la página que almacena el código de la página.

Supongo que usted necesita para apoyar varias páginas para que este control se ejecutarán en creo que usted puede encontrar el tipo de hijo de cualquier instancia de la Página a través de la Reflexión, pero no recuerdo cómo, pero usted debería ser capaz de hacerlo.

pero...como todo el mundo ha dicho, en este caso es lo que eventos se para.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top