- PR -

ASP.NETでボタンのクリック時に確認メッセージを表示するには?

1
投稿者投稿内容
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2003-04-18 13:15
記事「.NET TIPS: ASP.NETでボタンのクリック時に確認メッセージを表示するには?」で、onclick 属性にスクリプトを結び付けています。

この例ではボタンしかありませんから、それでも問題ありませんが。 一般的には、フォームの送信時に確認メッセージを出したいでしょうから、form 要素の onsubmit 属性に結びつけるほうがよいかと。


onsubmit 属性:
http://www.w3.org/TR/html4/interact/scripts.html#adef-onsubmit
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/scripts.html#adef-onsubmit
babie
会議室デビュー日: 2002/12/06
投稿数: 6
投稿日時: 2003-04-18 13:34
検証コントロール(*Validator)を配置している時に、
この記事と同じようにonclick属性に書き込んだんですが、
対象のボタンがCauseValidation = trueの時、
生成されたhtmlはValidatorの機能しかありませんでした。

検証コントロールと共存する方法を
どなたかお知りの方はいらっしゃいませんか?



_________________
babie
会議室デビュー日: 2002/12/06
投稿数: 6
投稿日時: 2003-04-18 13:39
すいません追記です。

上記の失敗の時は、
ValidationSummaryコントロールも配置していました。
_________________
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2003-04-18 17:46
引用:

検証コントロールと共存する方法を
どなたかお知りの方はいらっしゃいませんか?



2回目の回答を参照してください。

[ メッセージ編集済み 編集者: Mr.ADO.NET 編集日時 2003-04-18 20:13 ]
せんべい
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 61
お住まい・勤務地: 神奈川県川崎市
投稿日時: 2003-04-18 18:24
せんべいです

 私も悩んだのですが、CauseValidation = falseにして、
 onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); "をまず消します。
 そして、
 Button1.Attribute.add("onclick") = "messageFunction();if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();"
 とします。もちろん、Button1は押下により確認メッセージを出すボタンコントロールです。
 messagFunction();はメッセージを出すJavaScriptの関数です。

 これで大丈夫だと思います。消して、またわざわざ付ける。
 これしか、回避索はないと思います。

[ メッセージ編集済み 編集者: せんべい 編集日時 2003-04-18 18:26 ]
遠藤@DA
@ITエディタ
会議室デビュー日: 2001/08/25
投稿数: 60
お住まい・勤務地: Tokyo
投稿日時: 2003-04-18 18:35
Editorの遠藤です。

いろいろご指摘ありがとうございます。

>この例ではボタンしかありませんから、それでも問題ありませんが。
>一般的には、フォームの送信時に確認メッセージを出したいでしょうから、
>form 要素の onsubmit 属性に結びつけるほうがよいかと。

onsubmitにつけると、formにボタンが複数ある場合にはどれを押しても
メッセージが出てしまうので、とりあえずonclickに設定する方から
記事にしてみました。

              ■

>検証コントロールと共存する方法を
>どなたかお知りの方はいらっしゃいませんか?

これについては、

Webサーバコントロールボタンのonclickについて

のスレッドでも話題になっていますね。
.NET Framework 1.0ではバグっていて、1.1ではNothingButXMLInfoSet氏が
指摘されているように修正されています。

が、onclickで、return confirm()を付けてしまうと、それがvalidationより
前に来てしまってそこでreturnしてしまうので、正しく検証されないようです。
(alertでメッセージを出すだけならよいのですが)

Renderメソッドをオーバーライドして無理やり順番をコードで指定してしまう
こともできるようですが・・・

              ■

ちなみに、クライアント側だけでvalidationする場合には、onsubmitにもその
ためのコードが追加されるようなのですが、RegisterOnSubmitStatementで
onsubmitにreturn confirm()を追加しても、これが先にきてしまいます。

この場合にはformのAttributesにより、onsubmitにreturn confirm()を設定
すれば、validationの後ろに追加されるようです。

              ■

ということで、現在いろいろ調査中です。
スマートなやり方をご存知の方がいらっしゃいましたら、ぜひお知らせください。
.NET TIPSでまとめさせていただきます

PS.

>消して、またわざわざ付ける。

あんまりスマートじゃないような・・・
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2003-04-18 20:11
>>消して、またわざわざ付ける。
>あんまりスマートじゃないような・・・
ASP.NETが生成したJavaScriptをプログラムで書き換えるのは
バージョンアップ時動作しない可能性がありますので
お勧めできません。

あまりスマートではないのですが、<input type=button>
を使う方法もあります。

この場合、onClickイベントは競合しません。

コード:

<input id="btnAdd" name="btnAdd" runat="server"
type="button"
value="Add"
onClick="{if (confirm('Are you sure to add?')==false) return(false);}"
onServerClick="btnAdd_Click">



[ メッセージ編集済み 編集者: Mr.ADO.NET 編集日時 2003-04-18 20:19 ]
1

スキルアップ/キャリアアップ(JOB@IT)