- - PR -
GridViewのボタンにOnClientClickイベントを追加したのですが、ポストされてしまいます
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-15 20:32
こんばんは。
ASP.NETのGridViewで、 RowDataBoundイベントの際に、
で、クライアントのスクリプトが走るようにしようとしたのですが、 サーバにポストされてしまい、無効なポストバックとしてエラーとなってしまいます。 ((Button)e.Row.FindControl("btnDetail")).OnClientClick = strFunc; とやっても同じ結果になります。 ブラウザのコードを表示すると、OnClientClickと書かれているのですが・・・。 どなたか、ご教授お願いします。 | ||||||||
|
投稿日時: 2008-04-15 20:44
HTML の Button に "OnClientClick" という属性がないからだと思います。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2008-04-15 21:06
ご返信ありがとうございます。
試しに、 HTMLのINPUTタグを入れて、 e.Row.Cells[3].Attributes.Add("OnClick", strFunc); としたら、<TD>タグに追加されてしまいました。 | ||||||||
|
投稿日時: 2008-04-15 21:38
((Button)e.Row.FindControl("btnDetail")).OnClientClick="alert('test');"; で試してみてください。当方ではメッセージが表示されました。 ただ、ポストはされますよ。html上ではsubmitボタンですから。 alert('test');return false; とかしないと。
| ||||||||
|
投稿日時: 2008-04-15 21:49
ありがとうございます。
が鍵になって、期待していた動きになりました。 GridViewでポストされないボタン(行によって異なる引数を持つ)を作りたくて、 あれこれやっていたのですが。 ぽぴ王子さんなどのコメントにもあるように、 OnClientClickは、HTMLに無い属性で、 上手く表現できないのですが、ASP.NETで便宜上あるような印象を持ちました。
と記述すると、HTMLではOnClickになってしまいますし。 ありがとうございました。 | ||||||||
|
投稿日時: 2008-04-16 06:20
ボタンには、Input (Button)とInput (Submit)の2種類あります。
JavaScriptを起動させたいだけなら Buttonコントールを使用したらどうでしょうか。
_________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||||||
|
投稿日時: 2008-04-16 10:12
GridView の ButtonField で追加したボタンを押すとポストバックがかかるのは、ボタンが Input(Submit) だからではなく、Input(Button) の onclick 属性に __doPostBack() という JavaScript が入っているからです。
# そうなっている理由は、ButtonField が Link や Image の場合でも動作するためだと思います。 ですので、ポストバックさせないようにするには、 ・return false; を含んだ JavaScript を onclick 属性に追加する # 方法は既に挙がっている通りです。 # __doPostBack() 呼び出しの手前に追加されるので、__doPostBack() が動作しなくなります。 ・TemplateField 列に Input(Button) を追加したものを代わりに使う # __doPostBack() のないキレイなボタンができあがります。 のどちらかの方法になると思います。 | ||||||||
|
投稿日時: 2008-04-16 10:25
ありがとうございます。
ポストバックをさせないことを考えると、return false;するより、 <INPUT type="button">の方が、目的がはっきりして、気分的にもすっきりしますね。 こちらに変更します。 ありがとうございました。 |
1