- PR -

ShowModalDialog

投稿者投稿内容
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-04 14:02
VS2005でWebの開発をしています。
親画面から子画面をモーダルで表示したいのですが、うまくいきません。
’フォーカスをコントロールに移動できません。コントロールは表示されていない、使用できない状態、またはフォーカスを受け入れない種類です。’
というエラーのダイアログが出てしまいます。

ソース内でJavascript文字列を作成し、Response.writeしています。

Dim strPopupScript As String = ""
 strPopupScript &= "<script language=javascript>" & vbNewLine
strPopupScript &= "<!--" & vbNewLine
strPopupScript &= " var w = window.showModalDialog('../../Components/Kogamen.aspx');" & vbNewLine
'strPopupScript &= " w.focus();" & vbNewLine
strPopupScript &= "// -->" & vbNewLine
strPopupScript &= "</script>" & vbNewLine
Response.Write(strPopupScript)

ご存知の方アドバイスをお願いいたします。

_________________
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-04 14:52
すみません、つけたしです。
エラーはInternet Explorerのスクリプトエラーで、メッセージボックスで表示されます。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-07-04 15:23
このサーバサイドのコードが動作するタイミングに問題があるのかも知れません。
ブラウザで出力されたソースを確認してみましたか?

クライアントサイドスクリプトを出力するときには
Response.Write ではなく、RegisterClientScriptBlock メソッドを使う方が無難です。
これを使ってみてはどうでしょうか?

それと、w.focus() って何のために書いてるんでしょう?
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-04 17:33
KI様ありがとうございます。RegisterClientScriptBlockで実行してみましたが、結果は同じでした。

スクリプトは以下のように出力されています。
<script language=javascript>
<!--
var w = window.showModalDialog('../../Components/Kogamen.aspx');
// -->
</script>
それと、w.focus()は以前のソースの名残です。コメントになってる部分です。紛らわしくてすみません。

>サーバサイドのコードが動作するタイミングに問題
とはどういうことでしょうか?どのように検証できるものでしょうか?
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-07-04 18:19
引用:

var w = window.showModalDialog('../../Components/Kogamen.aspx');



このコードの前後に
alert('hoge1');
とか入れてみるとどうなります?
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-07-04 18:33
引用:

>サーバサイドのコードが動作するタイミングに問題
とはどういうことでしょうか?どのように検証できるものでしょうか?


すみません。RegisterClientScriptBlock を使ってもダメなら関係ないです。
Response.Writeでスクリプトを出力すると、
そのVBのコードが実行されたときにすぐに出力されるので、
そのコードを書いてある場所によっては、変な埋め込まれ方になってしまう
可能性があると思って書きました。

普通にHTMLファイルを作って、

var w = window.showModalDialog('適当なURL');

と書けば動作するのですよね?

まず、(まるくさんが提示してくださっている方法もそうですが)
どの行でエラーが出ているかを確認することが必要ではないでしょうか。
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-07-04 18:55
モーダル画面の表示はされるけれども「エラーが出る」と言うことではないのですか?

そうであれば親画面の呼び出しではなく
'Kogamen.aspx'に問題があるように思いますが…

けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-04 19:45
>まるく様、KI様
ありがとうございます。

このコードの前後に
alert('hoge1');
を入れて実行したところ、
1.hogeメッセージ
2.スクリプトエラーのメッセージ
3.kogamen.aspxの表示
4.hogeメッセージ
となりました。

>よっし〜。様
ありがとうございます。
window.open()で子画面を開いたときは問題なく動作します。
おっしゃられたとおりkogamen.aspxを調査してみます。

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