@IT会議室は、2009年4月15日に新システムに移行し、さらに2012年5月29日にITエンジニアに特化した
質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用くださいませ。
- PR -

ダイヤログボックスで[OK]と[キャンセル]の遷移について

投稿者投稿内容
くうこ
会議室デビュー日: 2004/06/15
投稿数: 5
投稿日時: 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;

}

------------------------------------------------------------------------------------------------------------------------------------------------------

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-14 16:31
Webアプリケーションでは、書いたコードがサーバー側とクライアント側のどちらで実行され、サーバーとクライアントでどのようなやり取りがされているのか意識する必要があります。

ブラウザのスクリプトエラーを表示するようにしてみてください。
(IE6であれば「インターネットオプション」→「詳細設定」で「スクリプトエラーごとに通知を表示する」にチェックを付ける)
そのあと、同じように操作してキャンセルを選んでみてください。エラーの内容が表示されるはずです。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-12-14 17:36
放置スレ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12388&forum=12
くうこ
会議室デビュー日: 2004/06/15
投稿数: 5
投稿日時: 2007-12-14 17:51
返信ありがとうございます。
教えていただいた通りに設定して実行してみたところ、
====================================================================
エラー:'this.Response'はNullまたはオブジェクトではありません。
====================================================================

というエラーが出ましたので、javascript部分の記述を変更しました。

Button_close.Attributes["onclick"] = "if (window.confirm('よろしいですか?')){}else{location.href ='RegistList.aspx'};";

こちらで実行してみたところ、エラーは出なくなったのですが、やはりキャンセルを押しても
[Button_close_Entry]を通ってしまいます。

何か、記述が足りないのでしょうか?
本当に勉強不足で申し訳ないのですが、ご教示ください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-12-14 18:46
RegisterClientScriptBlock の使い方が間違っているような気がする。
多分、スクリプトを複数登録しなきゃいけないのに、1個しか登録できてないんじゃない?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-12-14 22:09
Javascript 上は別のページに移っているのに、サブミットがキャンセルされていないので RegistList.aspx に移動後に PostBack しているのだと思います。
Javascript 関連でエラーや思った通りの動きをしないなーと思ったら、吐き出された HTML を確認するようにしてください。

これは移動しませんよね。
コード:
  <input type="submit" id="button1" value="ポストしない" onclick="return false" />
  <input type="submit" id="button2" value="ポストする" onclick="return true" />



あと Jitta さんのおっしゃっているように RegisterClientScriptBlock がちょっとおかしいですね。
_________________
かるあ のメモスニペット
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-12-14 22:14
引用:

くうこさんの書き込み (2007-12-14 16:12) より:

コード:
    /// <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; 

    }




RegisterClientScriptBlock の使い方もおかしいけれど、これ何をやっているのかわからない、AlertMessage は何をやっているクラスですか?
なんとなくJavascript を組み立ててくれるクラスなきもしますが。。。

ページに登録した後に別のページに遷移しているのはなぜですか?
作っておいて全部白紙にしてません?
_________________
かるあ のメモスニペット
くうこ
会議室デビュー日: 2004/06/15
投稿数: 5
投稿日時: 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の時に何も動かなくなりました。。)

何度も申し訳ないのですが、助言いただけますでしょうか?
よろしくお願いいたします。

アイティメディアの提供サービス

ホワイトペーパー(TechTargetジャパン/閲覧には会員登録が必要です)

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