- - PR -
ダイヤログボックスで[OK]と[キャンセル]の遷移について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-14 16:12
いつも、勉強させていただいております。
初心者なので簡単な質問かもしれませんが、昨日からずっとうまくいきません。 どうぞよろしくお願いします。 下記の処理がしたいと思っております。 ====================================================== あるページで[終了ボタン]を押下 ↓ ダイヤログボックスを表示「保存して終了しますか?」 ↓ @OKをクリック ↓ DBへの保存処理(Button_Keep_Close_Entry) ↓ メッセージボックスを表示「保存が完了しました。」 ↓ ページ切り替え Server.Transfer("RegistList.aspx"); Aキャンセルをクリック ↓ ページ切り替え Server.Transfer("RegistList.aspx"); ====================================================== 現在、2つ問題があります。 1つめは、@OKをクリックした場合にDBへ保存した後、メッセージボックスを表示せずに、 ページの切り替えをしてしまいます。 2つめは、Aキャンセルをクリックした場合も、OKと同じロジックを通ってしまいます。 if elseの記述の仕方がまずいのでしょうか? ソースコード------------------------------------------------------------------------------------------------------------------------------------- protected void Page_Load(object sender, EventArgs e) { // 終了ボタン押下でダイアログ表示 Button_close.Attributes["onclick"] = "if (window.confirm('保存して終了しますか?')){}else{this.Response.Redirect('RegistList.aspx')};"; } /// <summary> /// 終了ボタンを押下した時のアクション /// </summary> protected void Button_close_Click(object sender, EventArgs e) { string button_name = "close"; Button_Keep_Close_Entry(button_name); // クラス変数 AlertMessage msg = new AlertMessage(); GetDataProcess getDataSet = new GetDataProcess(); Type cstype = this.GetType(); ClientScriptManager cs = Page.ClientScript; //完了メッセージ string retMsg = msg.ShowMessage("保存が完了しました。"); cs.RegisterClientScriptBlock(cstype, "vbswin", retMsg); Server.Transfer("RegistList.aspx"); return; } ------------------------------------------------------------------------------------------------------------------------------------------------------ | ||||||||
|
投稿日時: 2007-12-14 16:31
Webアプリケーションでは、書いたコードがサーバー側とクライアント側のどちらで実行され、サーバーとクライアントでどのようなやり取りがされているのか意識する必要があります。
ブラウザのスクリプトエラーを表示するようにしてみてください。 (IE6であれば「インターネットオプション」→「詳細設定」で「スクリプトエラーごとに通知を表示する」にチェックを付ける) そのあと、同じように操作してキャンセルを選んでみてください。エラーの内容が表示されるはずです。 | ||||||||
|
投稿日時: 2007-12-14 17:36
放置スレ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12388&forum=12 | ||||||||
|
投稿日時: 2007-12-14 17:51
返信ありがとうございます。
教えていただいた通りに設定して実行してみたところ、 ==================================================================== エラー:'this.Response'はNullまたはオブジェクトではありません。 ==================================================================== というエラーが出ましたので、javascript部分の記述を変更しました。 Button_close.Attributes["onclick"] = "if (window.confirm('よろしいですか?')){}else{location.href ='RegistList.aspx'};"; こちらで実行してみたところ、エラーは出なくなったのですが、やはりキャンセルを押しても [Button_close_Entry]を通ってしまいます。 何か、記述が足りないのでしょうか? 本当に勉強不足で申し訳ないのですが、ご教示ください。 | ||||||||
|
投稿日時: 2007-12-14 18:46
RegisterClientScriptBlock の使い方が間違っているような気がする。
多分、スクリプトを複数登録しなきゃいけないのに、1個しか登録できてないんじゃない? | ||||||||
|
投稿日時: 2007-12-14 22:09
Javascript 上は別のページに移っているのに、サブミットがキャンセルされていないので RegistList.aspx に移動後に PostBack しているのだと思います。
Javascript 関連でエラーや思った通りの動きをしないなーと思ったら、吐き出された HTML を確認するようにしてください。 これは移動しませんよね。
あと Jitta さんのおっしゃっているように RegisterClientScriptBlock がちょっとおかしいですね。 _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-12-14 22:14
RegisterClientScriptBlock の使い方もおかしいけれど、これ何をやっているのかわからない、AlertMessage は何をやっているクラスですか? なんとなくJavascript を組み立ててくれるクラスなきもしますが。。。 ページに登録した後に別のページに遷移しているのはなぜですか? 作っておいて全部白紙にしてません? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2007-12-15 19:56
Jittaさん、かるあさん ありがとうございます。
ご指摘の内容を一生懸命理解していたら、こんなに時間かかってしまいました。 それで、やっとうまくいきました。 RegisterClientScriptBlockの使い方を確かに間違えていました。 すみません。。。 おっしゃるとおり、AlertMessageクラスの中で、Javascriptを組み立てています。 その中で、ページに移動するようにしたので、こちらの件は解決しました。 ありがとうございます。 ですが、キャンセルを押しても[Button_close_Click]を通るところはまだ解決できません。。 かるあさんの助言を参考にして、HTMLソースも見てみました。 <input type="submit" name="Button_close" value="終了" onclick="if (window.confirm('よろしいですか?')){}else{location.href ='RegistList.aspx'};" id="Button_close" style="width:70px;" /> submitのキャンセルの仕方が分からず、色々と試行錯誤↓してみたのですが、まだうまくいきません。 Button_close.Attributes["onclick"] = "if(!confirm('よろしいですか?')) location.href ='RegistList.aspx' return false;"; (これだと、キャンセルの時はページ移動してくれるが、OKの時に何も動かなくなりました。。) 何度も申し訳ないのですが、助言いただけますでしょうか? よろしくお願いいたします。 |