- PR -

ASP.NETで、確認ダイアログを条件付で表示させる方法

投稿者投稿内容
daito
常連さん
会議室デビュー日: 2005/03/26
投稿数: 30
投稿日時: 2005-04-11 22:47
私がやりたい処理について説明します。
例えば、名前と電話番号を入力する入力画面で、名前と電話番号を入力してから、保存ボタン押さずに、終了ボタンを押した時は、終了の確認ダイアログを出します。終了ボタンの前に、保存ボタンを押した時は、確認のダイアログは表示しないで、メニュー画面へ遷移するような動きをプログラムしたいと考えています。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-04-12 05:26
どこまで実現出来てるのかいまいちわかりません。つまり、どの部分で出来なくて
(行き詰って)困ってるのかがちょっとわからないです。

引用:
OK時処理とは別のWebフォームを呼び出す処理です。

ということは(サーバーサイドの)ButtonのClickイベントでRedirectかなんかしてる
んですかね。ということは「confirmなしでOK時処理」はクライアントでは何も
しなくて(既定のSubmitだけで)いいわけですね。

引用:
例えば、名前と電話番号を入力する入力画面で、名前と電話番号を入力してから、保存ボタン押さずに、終了ボタンを押した時は、終了の確認ダイアログを出します。終了ボタンの前に、保存ボタンを押した時は、確認のダイアログは表示しないで、メニュー画面へ遷移するような動きをプログラムしたいと考えています。

保存ボタン押下時にポストバックするんですよね?。PageLoadでは終了ボタンの
onclickにダイアログを表示するスクリプトを埋めておいて、保存ボタンのClick
イベントハンドラではonclickで何もしない(submitするだけ)ようにすればいいと思い
ます。しかし、これがTextBoxのチェンジイベントとどう関係があるのかわかりません。

引用:
また、Webコントロールのテキストボックスは複数あり、どのチェンジイベントにも
同じサーバ変数に同じ値を代入させて、複数あるWebコントロールのテキストボックスの内どれか一つでも、チェンジイベントが走った時にWebコントロールのボタンで確認ダイアログを表示させようとしています。

当然ですが、チェンジイベントが発生するのはサーバー側です(ポストバック時に
TextBoxの値がサーバーが送出した時の値と変わっていたら)。で確認ダイアログを出す
のはブラウザですよね。「チェンジイベントが走った時にWebコントロールのボタンで
確認ダイアログを表示」はちょっと意味がわかりません。TextChangedが発生して
クライアントに送出した瞬間にダイアログを出したいと言うことなら
(javascriptの)onclickでは実現できませんね。

参考(特にこの回)。ここも。

[ メッセージ編集済み 編集者: べる 編集日時 2005-04-12 05:30 ]
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-04-12 10:50
ぼのぼのです。

コードが提示されてないので現在どんな実装になっているのかわかりませんが、流れから予測するにaspxの方に直接javascriptを書いているのではないでしょうか?整理すると

・特定の条件の時だけダイアログを表示させたい
・ダイアログを表示させるのはjavascript(クライアントサイド)
・条件を持っているのはサーバサイドの変数
・クライアントサイドからサーバサイドの変数を直接見れない

ってことで悩んでるわけですよね?

解決方法は2つあると思います。1つ目は、たつごろーさんが仰ってる通り、aspxの方には予め何も書かないでおいて、aspx.vbの方でjavascriptを動的に生成する方法。ここが参考になるでしょう。

.NET TIPS[ASP.NET]ページにJavaScriptを埋め込むには?

2つ目は、サーバサイドの変数をクライアントサイドから見えるものに反映して、クライアントサイドからはそれを見るようにする方法。具体的にはHTMLコントロールのHiddenをサーバコントロールにして使います。
daito
常連さん
会議室デビュー日: 2005/03/26
投稿数: 30
投稿日時: 2005-04-14 12:12
みなさんありがとうございました。
参考なるアドレスの内容も読みながら、なんとか解決しました。

やり方ですが、
 サーバコントロールのテキスト
 Private Sub xx_TextChanged(ByVal sender As System.Object,.....
viewstate("chgflg") = 1

 サーバコントロールのボタン
Private Sub xxxx_Click(ByVal sender As System.Object,....
If viewstate("chgflg") = 1 Then
RegisterStartupScriptでJavaScript作成(スクリプト内で画面遷移)
Else
Response.Redirect("xxx.aspx")
End If
 このような感じです。
 問題がありそうでしたら、書き込みお願いします。

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