Suscribirse a un solo evento de control de usuario en varias páginas, asp.net 4.0
Frecuentes
Visto 293 veces
1
Tengo un control de usuario con un control de botón del lado del servidor asp.net. Uso este control de usuario en varias páginas. Estoy generando un evento personalizado en el evento de clic de botón del control de usuario. Todas las páginas principales que usan este control de usuario deben recibir una notificación de este evento personalizado que genero desde el control de usuario. ¿Hay alguna manera fácil de recibir una notificación de este evento personalizado en las páginas principales que no sea suscribirme a este evento en todas las páginas principales?
Intenté suscribirme a este evento de control de usuario en una clase base abstracta que anula el OnLoad()
evento de las páginas principales y hacer que todas las páginas principales hereden de esta clase base abstracta. El código de control de usuario detrás es:
public partial class CustomPaging : System.Web.UI.UserControl
{
public delegate void NavigationButtonHandler(int currentPage);
public event NavigationButtonHandler NavigationButtonClicked;
public int CurrentPage { get; set; }
protected void btnPrev_ServerClick(object sender, EventArgs e)
{
if (NavigationButtonClicked != null)
{
NavigationButtonClicked(CurrentPage);
}
}
}
Y la clase base abstracta es:
public abstract class CustomPagingBase
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
((CustomPaging)this.FindControl("ucPaging")).NavigationButtonClicked += new CustomPaging.NavigationButtonHandler(CustomPagingBase_NavigationButtonClicked);
}
void CustomPagingBase_NavigationButtonClicked(int currentPage)
{
LoadData(currentPage);
}
protected abstract void LoadData(int currentPage);
}
pero la pieza this.FindControl("ucPaging")
devuelve nulo. Tenga en cuenta que tengo un control de usuario con una identificación de ucPaging que configuré declarativamente en el marcado de la página principal
1 Respuestas
1
FindControl no busca recursivamente de forma predeterminada.
Así que a menos que tu ucPaging
el control se agregó directamente a la colección de controles que implementa su clase abstracta, obtendría un valor nulo.
Puedes usar esta función para encontrarlo.
public static Control FindControlRecursive(this Control control, string id)
{
if (control == null) return null;
//try to find the control at the current level
Control ctrl = control.FindControl(id);
if (ctrl == null)
{
//search the children
foreach (Control child in control.Controls)
{
ctrl = FindControlRecursive(child, id);
if (ctrl != null) break;
}
}
return ctrl;
}
Respondido 24 ago 12, 20:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas asp.net user-controls or haz tu propia pregunta.