C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ボタンへのOnClickイベントハンドラの追加で動かない


(過去ログ 74 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■43083 / inTopicNo.1)  ボタンへのOnClickイベントハンドラの追加で動かない
  
□投稿者/ まー (4回)-(2009/10/28(Wed) 17:52:05)

分類:[ASP.NET (C#)] 

動的に作ったボタンにイベントハンドラを追加した場合
ポストバックは発生するのですが、OnClickイベントが発生しません。

LinkButton lb = new LinkButton();
lb.Text = "リンクボタン";
lb.Click += new EventHandler(this.LinkButton1_Click);

protected void LinkButton1_OnClick(object sender, EventArgs e)
{
string bbb;
}

動的ではなく、このように画面でボタンを作ればもちろんクリックイベント発生します。
<asp:LinkButton ID="LinkButton1" runat="server"
OnClick="LinkButton1_OnClick" >aaa</asp:LinkButton>

しかし、OnClickだけをイベントハンドラを追加する方法にすると同じくポストバックのみになります。
<asp:LinkButton ID="LinkButton1" runat="server"
>aaa</asp:LinkButton>
LinkButton1.Click += new EventHandler(this.LinkButton1_Click);

解決方法がわかる方がいれば、よろしくお願い致します。

以上

引用返信 編集キー/
■43084 / inTopicNo.2)  Re[1]: ボタンへのOnClickイベントハンドラの追加で動かない
□投稿者/ Jitta on the way (473回)-(2009/10/28(Wed) 18:14:43)
No43083 (まー さん) に返信
> 動的に作ったボタンにイベントハンドラを追加した場合
> ポストバックは発生するのですが、OnClickイベントが発生しません。

まず、ASP.NET の仕組みを理解しましょう。すると、「ボタンを作った時」と、「ポストバックしてきた時」で、オブジェクトが違うことが解ります。次に、各種のイベントが発生するタイミングを調べます。すると、イベントを発生させるタイミングが、ボタンを作るよりも遥か前にあることが解るでしょう。

ポストバックを発生させたコントロールが、クライアントから上がってきています。それを見て自分でイベントを発生させるか、イベントを発生させるよりも前にボタンを生成するようにします。
引用返信 編集キー/
■43132 / inTopicNo.3)  Re[2]: ボタンへのOnClickイベントハンドラの追加で動かない
□投稿者/ まー (6回)-(2009/10/29(Thu) 19:47:54)
Jitta on the wayさん、お返事ありがとうございます。
イベント発生タイミングを調べて試行錯誤しまいた。

Clickイベントハンドラ追加を、PreRenderでしたので動きませんでした。
Page_Loadで追加すれば、問題無いことがわかりました。

Page_Loadは最初に実行されますよね。 なのでそれでは問題で・・・

GridViewからのボタンクリックで、その行の値を取得し
LinkButtonに反映したいので、RomCommandやSelectedIndexChangedか
PageのPreRenderあたりでClickイベントを追加する必要があるのです。

仕方無いので、Page_LoadでPage.Request.Params.Get("__EVENTTARGET")により
LinkButtonが押されたかを判定して、Page_LoadでClickイベントを追加して
なんとか想定どおりの動きにもっていきました。

しかし、どう考えてもっとスマートな方法がある気がするのですが・・・

引き続き、こうすればもっと良い等があればよろしくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -