- - PR -
showModalDialogについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-22 22:57
初めて書込みします。
asp.net開発初心者です。宜しくお願いします。 現在ASP.NET(C#)でWebアプリケーションを作成しております。 検索画面をモーダルで表示したいため、 親画面よりwindow.showModalDialogを使って 別ウインドウにて検索画面のページを表示しようとしています。 で、親画面(WebForm1.aspx.cs)の検索ボタンのクリックイベントに 以下のように記述しました。 this.Page.RegisterClientScriptBlock( "clientScript", "<script language=JavaScript>" + "window.showModalDialog('WebForm2.aspx',window," + "'status=false;dialogWidth:400px;dialogHeight:600px');</SCRIPT>"); 検索画面(WebForm2.aspx.cs)では、確定ボタンが押されたときに 検索画面で選んだ内容を親画面のテキストにセットするため、 確定ボタンのクリックイベントに以下のように記述しました。 this.Page.RegisterStartupScript( "clientScript", "<script language=JavaScript>" + "var opener=window.dialogArguments;" + "var opener_form=opener.document.forms(0);" + "opener_form.Parent.value=" + Child.Text + ";" + "self.window.close();" + "</script>"); 実行してみると、 検索画面で確定ボタンをクリックし、親画面に戻る時点で、 opener_form.Parent.value=…の箇所で以下のエラーが発生します。 Microsoft JScript 実行時エラー: 'opener_form.Parent…' は Null またはオブジェクトではありません。 親画面の方のコードの記述に少し自信がないのですが、 なにかおかしなところがありましたらアドバイスを頂けると幸いです。 よろしくお願いします。 [ メッセージ編集済み 編集者: s3207w 編集日時 2005-09-23 20:22 ] | ||||||||
|
投稿日時: 2005-09-23 11:40
こんにちは、じゃんぬ です。
まず、opener.document.forms(0); が null で返ってます。 エラー内容を元に、その辺りは調査すべきじゃないでしょうか? どんな値が入っているかは、alert なんかで出力すればわかるでしょうし。 # 要するに、デバッグの余地がありますってことです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-09-23 12:22
Parentはwindowオブジェクトのプロパティであり、親のオブジェクトを示すため、そこに直接値は設定できないと思います。また、Parentプロパティは、Formでは使えないんじゃないでしょうか? | ||||||||
|
投稿日時: 2005-09-23 13:53
opener_form.親画面のテキストボックスの名前.value = "格納したい文字列";
っていうのが適切ではないでしょうか。 | ||||||||
|
投稿日時: 2005-09-23 14:42
NAL-6295です。
そもそも、showModalDialogで開いた場合、親にアクセスできましたっけ。 アクセスできなかった覚えがあります。 その代わりに、閉じたときにshowModalDialogの戻り値を判定してセットしたりしていましたが。 間違っていたら申し訳ありません。 | ||||||||
|
投稿日時: 2005-09-23 19:02
>NAL-6295さん
確かに通常のwindow.openと同じ方法でのアクセスはできないです。 しかし、モーダルの場合はshowModalDialogメソッドの第2引数で、 ダイアログウィンドウへ値を渡す事ができます。 それを参照する為には、ダイアログ側で window.dialogArgumentというプロパティを参照します。 呼び出し側で自分自身のwindowオブジェクトを渡せば、 呼び出された側で、そのwindowオブジェクトを参照する事ができ、 「親へアクセスする」ということが実現できます。 s3207wさんのソースが参考になるのではと思います。 | ||||||||
|
投稿日時: 2005-09-23 20:35
アドバイスありがとうございます。 上にあげたコードですが、さすがにそのままのせるわけにもいかないので テキスト名等は変えたのですが、 かえって紛らわしくなってしまったようで、申し訳ないです。 Parentプロパティを使用しているわけではなく、 意味合い的には以下のような感じになっています。 ・・・ "var opener_form=opener.document.forms(0);" + "opener_form.親画面側テキスト名.value=" + 検索画面側テキスト名.Text + ";" + ・・・ | ||||||||
|
投稿日時: 2005-09-28 15:58
こんにちは。
showModalDialogとshowModelessDialogのサンプルが載ってました。 MSDNコラム 優れたダイアログの重要性 たしかに、こちらのMSDNサンプル(dialog2.htm)では、戻り値をセットしてますね。 [間違い] showModalDialogの制限なのかも? #試してないので、想像の域です。 [/間違い] 追記:試してみました。windowを受け渡して親を操作できました。 [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-28 16:35 ] |