- PR -

親画面→子画面→孫画面のページ遷移について

1
投稿者投稿内容
ロバの耳
会議室デビュー日: 2005/03/07
投稿数: 11
投稿日時: 2005-12-06 14:38
いつもお世話になっております。
ASP.NET(VB.NET)でWebアプリを開発しています。
(ブラウザはIE5.0以上が対象)

親画面→子画面→孫画面とページ遷移し、その孫画面で入力した値を
子画面に表示させたいのですがうまく出来ません。
(画面遷移はASP側からJavaScriptを発行して実現しています)

具体的に言いますと、(親画面=A,子画面=B,孫画面=C)
A画面のボタンクリックでB画面を開き、
B画面のボタンクリックでC画面を表示します。
C画面でボタンクリックで、
B画面のテキストボックスにC画面で入力した値を設定したいのですが、
C画面のwindow.openerで「nullまたは
オブジェクトではありません」のエラーが発生します。

《詳細コード》
----------------------【A画面】---------------------
次のコードでB画面を開いています。
Dim strScript As New System.Text.StringBuilder
strScript.Append("<script language=javascript>" & vbCrLf)
strScript.Append("win_C=window.open("FormB","FormB.aspx");")
strScript.Append("window.close();")
strScript.Append("</script>")
RegisterClientScriptBlock("openwin_B", strScript.ToString)

----------------------【B画面】---------------------
次のコードでC画面を開いています。
Dim strScript As New System.Text.StringBuilder
strScript.Append("<script language=javascript>" & vbCrLf)
strScript.Append("win_C=window.open("FormC","FormC.aspx");")
strScript.Append("window.close();")
strScript.Append("</script>")
RegisterClientScriptBlock("openwin_C", strScript.ToString)

---------------------【C画面】---------------------
C画面のボタンクリック時の処理は次のとおりです。
※strInputにC画面での入力値が入ります。
Dim strScript As New System.Text.StringBuilder
strScript.Append("<script language=javascript>" & vbCrLf)
strScript.Append("window.opener.FormB.Txt_Input.value='" & strInput & "';")
strScript.Append("window.close();")
strScript.Append("</script>")
RegisterClientScriptBlock("closewindow", strScript.ToString)
-----------------------------------------------------

試しに、【B画面】での入力値を【A画面】に設定する処理を
上記と同じようなコードで実施しましたが、
こちらは問題なく実行されました。

過去の投稿等を調べて、試行錯誤してみたのですが解決しませんでした。
何か原因や解決策をご存じでしたらご教授下さい。よろしくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-12-06 15:11
引用:

strScript.Append("window.close();")


閉じてるからなんじゃないでしょうか。

_________________
たつごろー
codeseek
こみゅぷらす
ロバの耳
会議室デビュー日: 2005/03/07
投稿数: 11
投稿日時: 2005-12-06 15:26
たつごろーさん。回答有難うございます。

B画面に値を設定した後で、C画面を閉じる仕様なので問題ないと考えています。
エラーは、そのC画面を閉じる前に発生します。

    ---------------------【C画面】---------------------
  C画面のボタンクリック時の処理は次のとおりです。
  ※strInputにC画面での入力値が入ります。
  Dim strScript As New System.Text.StringBuilder
  strScript.Append("<script language=javascript>" & vbCrLf)
 ★strScript.Append("window.opener.FormB.Txt_Input.value='" & _
strInput & "';")
  strScript.Append("window.close();")
  strScript.Append("</script>")
  RegisterClientScriptBlock("closewindow", strScript.ToString)
  -----------------------------------------------------

★の部分でエラーが発生します。

内容が分かり難くて申し訳ありません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-06 15:27
引用:

strScript.Append("window.opener.FormB.Txt_Input.value='" & strInput & "';")



window.opener.Form1.Txt_Input.value ではなく?
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-06 15:41
たつごろーさんは、B画面でCを開いた後にB自身を閉じている個所を指摘されたのだと思いますが...
引用:

----------------------【B画面】---------------------
次のコードでC画面を開いています。
Dim strScript As New System.Text.StringBuilder
strScript.Append("<script language=javascript>" & vbCrLf)
strScript.Append("win_C=window.open("FormC","FormC.aspx");")
strScript.Append("window.close();") ←ここ
strScript.Append("</script>")
RegisterClientScriptBlock("openwin_C", strScript.ToString)



処理が繋がらないので、実際は閉じてはないとして話を続けます。
記述自体には誤りはないように見受けられますので、
・Txt_Inputのコントロール名が異なっている。
・Txt_Inputの属するForm名がFormBではない。
・Txt_Inputが複数あり、配列になってしまっている。
あたりが怪しい部分です。

ブラウザでソースを表示してみて、その辺を確認してみて下さい。
ロバの耳
会議室デビュー日: 2005/03/07
投稿数: 11
投稿日時: 2005-12-06 15:56
たつごろー、todoさん、でっち6号さん。回答ありがとうございます。

でっち6号さんのご指摘のとおり、ブラウザで確認したところ
フォーム名がFormBではなく、Formbとなっていました。

お騒がせして申し訳ありませんでした。
1

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