9

ユーザーコントロールからクリックイベントを発生させ、それを含むページで処理しようとしています。私が抱えている問題は、ユーザー コントロールのボタン 'imgstep1' をクリックすると、imgstep1_click イベントの背後にあるコードがトリガーされますが、'btnHandler' イベントは常に null です。したがって、親イベントは呼び出されません。

これに関するヘルプは大歓迎です。

私のユーザー制御コードは次のとおりです。

.ascx コード:

<asp:ImageButton ImageUrl="./images/step1.gif" 
        ID="imgstep1" runat="server" 
         OnClick="imgstep1_Click"/>

.ascx.cs コード:

    public delegate void OnImageButtonClick();
    public event OnImageButtonClick btnHandler;

    protected void imgstep1_Click(object sender, ImageClickEventArgs e)
    {
        if (btnHandler != null)
            btnHandler();
    }

.aspx ページ コード:

protected void Page_Load(object sender, EventArgs e)
{
     ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);
}

void ucStepHdr_btnHandler()
{
  Response.Write ('test');
}
4

3 に答える 3

11

コードは、正しく機能するのに十分シンプルに見えます。btnHandlerがnullである唯一の理由は、aspxページのイベント登録コードが呼び出されていないためである可能性があります。

ポストバックはありますか?ページが読み込まれるたびにイベントを追加してもよろしいですか?

ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);
于 2009-09-11T12:21:37.927 に答える
1

削除OnClick="imgstep1_Click"して、これを ascx.cs に入れると

protected ImageButton imgstep1;

protected override void OnInit(EventArgs e)
{
    this.imgstep1.Click += new ImageClickEventHandler(imgstep1_Click);
}

イベントを配線するこの方法は機能しますか?

于 2009-09-11T12:38:33.500 に答える
0

動作するはずです...デバッガーでコードをステップ実行して、Page_Load に設定するとすぐに ucStepHdr.btnHandler の値を確認できますか? (余談ですが、伝統的にこれらはロードではなく init で設定されますが、これは問題ではありません。)

于 2009-09-11T12:08:36.003 に答える