2011-10-18 27 views
1

PageWithResults.aspxに埋め込まれたPaging.ascxというページにユーザーコントロールがあるとします。このコントロールには、現在のページ(CurrentPage、TotalRecordsInResults、RecordsPerPageなど)に関するさまざまな詳細を追跡するのに必要なプロパティがあります。また、ハイパーリンク(「次のページ」または「前のページ」)をクリックすると発火するイベントも含まれます。以下の例。これらのLinkBut​​ton Webコントロールの1つがクリックされたことをPageWithResults.aspxに伝える必要があります。私は、このユーザーコントロールイベントが呼び出されると(ハイパーリンクがクリックされると)、ページクラスの他のメソッド/イベントも呼び出すように、ページ内にデリゲートを割り当てる必要があると思います。そうすれば、CurrentPageの新しい値が(以下のイベントで呼び出されたものに基づいて)何かを素早く確認し、(CurrentPageプロパティに基づいて)新しいページの新しい結果セットを得ることができます。しかし、私は最良のアプローチについてはよく分かりません。私はこれに代理人が必要だと思っていますが、どのように接続するのか分かりません。詳細が必要な場合は、お尋ねください。ASP.NETユーザーコントロールイベントが呼び出されたときにページイベントを呼び出す

protected void btnNext_Click(object sender, EventArgs e) 
    { 
     this.CurrentPage = this.CurrentPage + 1; 
     if (OnPageChanged != null) OnPageChanged(this.CurrentPage); 
    } 

私は、ここで私の代議員をどこかに配置しなければならないと思っています。 ??

protected void btnNext_Click(object sender, EventArgs e) 
    { 
     this.CurrentPage = this.CurrentPage + 1; 
     if (OnPageChanged != null) OnPageChanged(this.CurrentPage); 
        //delegate to call object.method or something 
    } 

答えて

8

イベントを使用すると、正常に動作します。

あなたはそうのようなユーザーコントロール内のイベントを作成します。

public event EventHandler ButtonClicked; 

が続いてイベントを起動する必要があるとき:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (ButtonClicked != null) 
     ButtonClicked(this, new EventArgs()); 
} 

をあなたのページでは、イベントハンドラを割り当てる必要があります:

protected void Page_Load(object sender, EventArgs e) 
{ 
    UserControl1.ButtonClicked += new EventHandler(UserControl1_ButtonClicked); 
} 

void UserControl1_ButtonClicked(object sender, EventArgs e) 
{ 

} 

また、上記の方法を使用すると、ページ参照をUにキャストすることもできますserControlを呼び出してパブリックメソッドを直接呼び出す:

MyPage page = (MyPage)Page; 
page.AMethod(); 

希望します。

+0

私の頭は、これらの代表者とスピン – MacGyver

関連する問題