- - PR -
子画面から親画面のテキストボックスに値を入れたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-17 11:07
RapidExpress様、ありがとうございます。
はい、その通りです。 希望する動作は、 「親ウィンドウ」のFormViewにあるボタンを押すと、「子ウィンドウ」が開きます。 「子ウィンドウ」の中にある「ボタン」を押したら、 親ウィンドウのFormViewの中にある「表示TextBox」に「子ウィンドウ」で押したボタンのテキストを代入したいのです。 調べてみて、「window.opener.document.MainForm.textbox.value」で 親ウィンドウに値を代入できる様な事が書いてあったのですが、 使用方法が間違っていますでしょうか? | ||||||||
|
投稿日時: 2008-06-17 11:17
ひろれい様、ありがとうございます。
早速試してみます。
申し訳ございませんでした。 | ||||||||
|
投稿日時: 2008-06-17 11:20
気を悪くされたようですみません。 お詫びになるかどうかわかりませんが、いつもよりがんばって回答しますので許してください。 さて、提示されたコード(そのままではありませんが)で動かしてみたのですが、私の環境では 「window.opener.document.forms.FormView1 が null またはオブジェクトではありません」と怒られてしまいました。 コードを読む限りでは window.opener.document が null になるような原因は見あたりませんでしたが、ぷりさんの 「"window.opener.document."はNULLかオブジェクトではありません。」の document の後にドットがあるのが気になりました。 もしかすると、null なのは document ではなく、そのさらに奥(?)にある別の何かではないか、と思いました。 …と書いている間に回答が増えているみたいですので、一旦ここで送信します。 | ||||||||
|
投稿日時: 2008-06-17 11:22
openerは、親画面がリロードしたり遷移したりすると無効になりますが、それじゃないっすかね?
# .NETとか言ってないで、ただのHTMLにJavascriptを書いて勉強してみるといいですよ。 | ||||||||
|
投稿日時: 2008-06-17 11:31
その中にあらわれる MainForm とは、親画面のHTML中でいう <form id="ほにゃらら"> の「ほにゃらら」の部分になります。 textbox とは、同じく親画面のHTML中でいう <input type="text" id="ふにゃらら" ...>の「ふにゃらら」の部分になります。 これらのIDは、普通は子画面からはわかりませんので、window.open で hyouji.aspx を開くときに、クエリ文字列などでIDの文字列を渡してあげるとよいと思います。 # よい方法かどうかは実はあまり自信がありませんが、私は実際にそうしています。 で、HTML中にあらわれるIDは、デザイナ上にコントロールを置いたときにつけられるIDとは異なります。例えばFormView内に何かTextBoxを置くと、HTML中にあらわれるIDは 「FormView1_TextBox1」みたいな感じになります。これを取得するには、サーバ側のコードからは TextBox1.ClientID で取得でき、クライアント側のaspxに埋め込みたい場合は <% = TextBox1.ClientID %> で可能です。 なお、MainFormにあたる部分のクライアント側のIDは、Page.Form.ClientID で取得できます。 # すぐには分からないかもしれませんが、それは私の説明が下手なだけですのであまり気にしないでください。 | ||||||||
|
投稿日時: 2008-06-17 12:59
FormView の使い方があっているかどうか自信ありませんが、とりあえず出来るようですね。
親画面
子画面
| ||||||||
|
投稿日時: 2008-06-17 13:03
言葉で説明しようとしましたがうまくいかなかったので、ひろれいさんのコードのFormView版を書いてみました。
[追記] ※投稿が前後しましたが、参考にしたのは 2008-06-17 11:01 のひろれいさんのコードです。 [/追記] 先ほど私が書いた通り、子画面を開くときに、クエリ文字列で親画面のフォームとテキストボックスのIDを渡しています。 子画面はそれを使って、親画面のテキストボックスを操作します。 親 Window
子 Window
どういった JavaScript を埋め込もうとしているか、デバッグ実行で動きを確認してみてください。 [ メッセージ編集済み 編集者: rain 編集日時 2008-06-17 13:05 ] | ||||||||
|
投稿日時: 2008-06-17 15:40
rain様、ひろれい様、冬寂様 ありがとうございます。
ひろれい様 コードありがとうございます。 このコードを元に試しましたら、やはり 「"window.opener.document.forms['form1'].FormView1_TextBox2.value='" & Me.Button1.Text & "';</script>")」 の部分で、「window.opener.document が NULL またはオブジェクトではありません」と いうエラーになってしまいました。 formID等再度確認します。 rain様 こちらこそ、大変申し訳ありませんでした。 自身で調べても、その調べ方が正しいのかどうか分からなくなってしまい焦っていました。 コードありがとうございます。 このコードを元に試しましたら、 「識別子がありません。」というエラーが出てしまいました。 多分、子ウィンドウの「"hyouji", _」という部分を指していると思います。 デバックして親ウィンドウの中を確認したら、 「Dim txt As TextBox = FormView1.Row.FindControl("TextBox1")」の 「txt」部分には子ウィンドウで押したボタンのテキストが入っているのですが・・・ |