- PR -

[ASP.NET]Javascript使用の親画面への値引渡しが上手くいきません・・・

投稿者投稿内容
ちづる
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 72
投稿日時: 2004-08-16 15:17
過去ログを参照しましたが、現象が解消されませんでしたので投稿させていただきます。

現在Webアプリ(とVB.NET)にて親画面と子画面を使ったものを作成しています。
やりたいことは
1.親画面から子画面をOpen
2.子画面にてデータを入力
3.子画面の「適用」ボタン押下時に親画面のテキストボックスに値を渡し
4.親画面のテキストボックスのデータが変更されたら、親画面内のグリッドデータを
バインドする

です。
本のサンプルを元に記述しているのですが、
1はwindow.openにて実現できました。
2もできます。
問題は3です。
window.openerにて親画面のテキストボックスにデータを渡したいのですが、
上手く渡すことができません。
JavaScriptは初めてなもので、何がどうダメなのかお手上げ状態です。

ご存知の方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?

以下が実際のコードです。
----------------------------------------------------------
dim sb as New StringBuilder
sbsort.Append(子画面の値)

dim sbScript as New StringBuilder
sbScript.Append("<script language='jabascript'>" & vbCrLf)
sbScript.Append(vbTab & " window.opener.MainForm.textbox.value= '" & sb.Tostring() & "';" & vbCrLf)
sbScript.Append("</" & "script>")

RegisterClientScriptBlock("data",sbScript.Tostring)
カニ
ベテラン
会議室デビュー日: 2004/06/24
投稿数: 53
お住まい・勤務地: 横浜・川崎
投稿日時: 2004-08-16 17:07
window.opener.document.MainForm.textbox.value
でどうですか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-08-16 17:08
まず
'jabascript'
ではなく
'javascript'
です。。。

このJavaScriptは「適用」ボタン押下時に呼ばれるようになってるのでしょうか?

ちづる
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 72
投稿日時: 2004-08-16 17:53
>カニさん
アドバイスありがとうございます。
documentで試しても同じ状況でした。

>burton999さん
お恥ずかしい限りです・・・。
実際のコードはもちろんjavascriptになってます。

>このJavaScriptは「適用」ボタン押下時に呼ばれるようになってるのでしょうか?
そのとおりです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-16 19:15
var target = window.document.getElementById('目的のオブジェクトのID');
で探す方が良くない?
すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2004-08-16 19:20
気になる点をいくつか。

(1)sb.Tostring()を出力していますが、その上のコードでは
 sbsort.Append(子画面の値)
 となっていますよね。sbの中身は何が入っているのでしょうか。
 おそらく
 sb.Append(子画面の値)
 の間違いなのではないかと思うのですが。

(2)このコードはサーバが子画面を出力するためのコードだと思います。だとすると、
 最初に子画面を作成した際にはsbは空の筈です(まだユーザが入力していないから)。
 しかし、JavaScriptが実行されるのは適用ボタンを押した際、とのことですので、
 親画面には空の値がそのまま送られることになります。
 おそらく、適用ボタンを押したときには子画面が再描画されるのでは、と思いますので、
 最初の画面と再描画後の画面で「window.opener.document.MainForm.textbox.value=」
 の=の後の値がどうなっているか、ブラウザのソース表示機能(IEなら右クリックで
 「ソースの表示」)で確認してみてください。
 私の予想が正しければ、最初は空の値が、再描画後はユーザが入力した値が入っている
 筈です。

(3)そもそも、JavaScriptで親画面に値を渡すなら、サーバにポストしなくても大丈夫です。
 子画面でユーザがデータ入力するテキストボックスの名前がko_textboxだとすると、
 window.opener.document.MainForm.textbox.value=MainForm.ko_textbox.value;
 で値を渡せます。
 もっとも、「4.親画面のテキストボックスのデータが変更されたら、親画面内のグリッド
 データをバインドする」のためには親画面を操作してサーバにポストしなければならない
 のですが、それはまた別の問題としておきます。
ちづる
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 72
投稿日時: 2004-08-17 10:58
>Jittaさん
ありがとうございます。
私の言葉が足りませんでした。
親のオブジェクトは発見できましたが、肝心の子のデータを引き渡す事ができないのが
現状です。

>すなめりさん
(1)sb.Tostring()が書き間違いです・・・。実際のコードは
sbsort.Tostirng()にて子画面の値を入れてます。
書き間違いが多くて申し訳ありません。

(2)ソースを確認した所再描画後に確か値が入っていました。
ただし最初の画面にはこのJavaScriptはいませんでした。
予想として、このスクリプトを記述してあるのが適用ボタン押下時のイベント内に
ある為に初期状態ではこのJavaScriptはいないのではないかと思ってます。

(3)渡したい子画面の値がグリッド内のデータで実際は
sbSort.Append(dr("name"))
sbSort.Append(dr("ID"))
drはグリッドのdatarowです。
そのsbSortにはきちんとデータの取得はできていました。

「4.親画面のテキストボックスのデータが変更されたら、親画面内のグリッド
 データをバインドする」はちゃんと動作しましたが、結局空がテキストボックスに入ってるので無意味な動きになってるんですが^^;
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-08-17 11:27
解決にはなりませんが(逃げ道として...)
子画面と親画面の両方において、サーバーへポストするならば
子画面にてSessionへ一時格納して親画面にてSessionから取得
するという方法も。。。(^^;

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