asp.net サーバー側ボタン コントロールを含むユーザー コントロールがあります。このユーザー コントロールを複数のページで使用します。ユーザーコントロールのボタンクリックイベントでカスタムイベントを発生させています。このユーザー コントロールを使用するすべての親ページは、ユーザー コントロールから発生させたこのカスタム イベントの通知を受け取る必要があります。すべての親ページでこのイベントをサブスクライブする以外に、親ページでこのカスタム イベントの通知を受け取る簡単な方法はありますか?
OnLoad()
親ページのイベントをオーバーライドし、すべての親ページがこの抽象基本クラスから継承されるようにする抽象基本クラスで、このユーザーコントロールイベントをサブスクライブしようとしました。ユーザーコントロールの背後にあるコードは次のとおりです。
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);
}
}
}
抽象基本クラスは次のとおりです。
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);
}
しかし、ピースthis.FindControl("ucPaging")
は null を返します。親ページのマークアップで宣言的に設定した ucPaging の ID を持つユーザーコントロールがあることに注意してください