- PR -

showModalDialogについて

投稿者投稿内容
s3207w
会議室デビュー日: 2005/09/22
投稿数: 3
投稿日時: 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 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-23 11:40
こんにちは、じゃんぬ です。

引用:

s3207wさんの書き込み (2005-09-22 22:57) より:

親画面の方のコードの記述に少し自信がないのですが、
なにかおかしなところがありましたらアドバイスを頂けると幸いです。
よろしくお願いします。


まず、opener.document.forms(0); が null で返ってます。
エラー内容を元に、その辺りは調査すべきじゃないでしょうか?
どんな値が入っているかは、alert なんかで出力すればわかるでしょうし。

# 要するに、デバッグの余地がありますってことです。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-09-23 12:22
引用:

s3207wさんの書き込み (2005-09-22 22:57) より:

Microsoft JScript 実行時エラー: 'opener_form.Parent…' は Null またはオブジェクトではありません。



Parentはwindowオブジェクトのプロパティであり、親のオブジェクトを示すため、そこに直接値は設定できないと思います。また、Parentプロパティは、Formでは使えないんじゃないでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-09-23 13:53
opener_form.親画面のテキストボックスの名前.value = "格納したい文字列";

っていうのが適切ではないでしょうか。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-09-23 14:42
NAL-6295です。

そもそも、showModalDialogで開いた場合、親にアクセスできましたっけ。
アクセスできなかった覚えがあります。
その代わりに、閉じたときにshowModalDialogの戻り値を判定してセットしたりしていましたが。

間違っていたら申し訳ありません。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-09-23 19:02
>NAL-6295さん
確かに通常のwindow.openと同じ方法でのアクセスはできないです。

しかし、モーダルの場合はshowModalDialogメソッドの第2引数で、
ダイアログウィンドウへ値を渡す事ができます。
それを参照する為には、ダイアログ側で
window.dialogArgumentというプロパティを参照します。

呼び出し側で自分自身のwindowオブジェクトを渡せば、
呼び出された側で、そのwindowオブジェクトを参照する事ができ、
「親へアクセスする」ということが実現できます。

s3207wさんのソースが参考になるのではと思います。
s3207w
会議室デビュー日: 2005/09/22
投稿数: 3
投稿日時: 2005-09-23 20:35
引用:

trapemiyaさんの書き込み (2005-09-23 12:22) より:
引用:

s3207wさんの書き込み (2005-09-22 22:57) より:

Microsoft JScript 実行時エラー: 'opener_form.Parent…' は Null またはオブジェクトではありません。



Parentはwindowオブジェクトのプロパティであり、親のオブジェクトを示すため、そこに直接値は設定できないと思います。また、Parentプロパティは、Formでは使えないんじゃないでしょうか?



アドバイスありがとうございます。

上にあげたコードですが、さすがにそのままのせるわけにもいかないので
テキスト名等は変えたのですが、
かえって紛らわしくなってしまったようで、申し訳ないです。

Parentプロパティを使用しているわけではなく、
意味合い的には以下のような感じになっています。

・・・
"var opener_form=opener.document.forms(0);" +
"opener_form.親画面側テキスト名.value=" + 検索画面側テキスト名.Text + ";" +
・・・
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-28 15:58
こんにちは。
引用:

そもそも、showModalDialogで開いた場合、親にアクセスできましたっけ。
アクセスできなかった覚えがあります。
その代わりに、閉じたときにshowModalDialogの戻り値を判定してセットしたりしていましたが。


showModalDialogとshowModelessDialogのサンプルが載ってました。
MSDNコラム 優れたダイアログの重要性

たしかに、こちらのMSDNサンプル(dialog2.htm)では、戻り値をセットしてますね。
[間違い]
showModalDialogの制限なのかも?
#試してないので、想像の域です。
[/間違い]
追記:試してみました。windowを受け渡して親を操作できました。

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-28 16:35 ]

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