- PR -

子画面から親画面のラベルに値を代入する方法

投稿者投稿内容
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-01-25 20:22
いつもお世話になっております。

環境: WinXP VS2005

ASP.netの初心者です。
子画面から親画面の編集を行いたいと思い、
window.openerを使ってみました。

しかし、親画面のテキストボックスには値をセットできるのですが、
ラベルにはセットできません。

調べたところ、入力可能なコントロールにしかこの方法は使用できないようです。

解決策、またはwindow.opener以外の方法をご存知の方いらっしゃいましたら
ご教授ください。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-01-25 21:06
「子画面から親画面の編集」というのは、Javascriptで別ウィンドウの値を書き換えるという理解でいいんですよね。

window.openerに注目していらっしゃるようなので、私が誤解しているのかもしれませんが、valueプロパティが使えないということではないんですか?
Label1.value
などと書くとスクリプトエラーになるということではなくて?

そうならinnerTextとかinnerHTMLとかいうのを使ってみてください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-25 22:19
ラベルは span 要素だから。。。innerText かな。
_________________
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-01-26 10:44
遅くなり申し訳ありません。
ご返信ありがとうございます。

>>「子画面から親画面の編集」というのは、Javascriptで別ウィンドウの値を
>>書き換えるという理解でいいんですよね。
>>window.openerに注目していらっしゃるようなので、私が誤解しているのかも
>>しれませんが、valueプロパティが使えないということではないんですか?

おっしゃるとおり、別ウインドウの値を書き換えたいのですが、
ラベルにvalueが使えません。

innerTextを調べて以下のように使ってみたのですが、やはりラベルを編集できません。
(テキストは従来とおり編集できました。)

親画面のaspxファイル
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txta" runat="server">testTEXT</asp:TextBox>
<asp:Label ID="lbla" runat="server">testLABEL</asp:Label>
</div>
</form>
</body>

子画面での処理
Dim csOpenWindow As New StringBuilder()
Dim csName As String = "TEST"
Dim csType As Type = Me.GetType()
Dim cs As ClientScriptManager = Page.ClientScript

csOpenWindow.Append("<script type=text/javascript>")
csOpenWindow.Append("window.opener.document." & "txta" & ".innerText = '" & 代入内容 & "' ;")
csOpenWindow.Append("window.opener.document." & "lbla" & ".innerText = '" & 代入内容 & "' ;")
csOpenWindow.Append("</script>")

'スクリプトの実行
cs.RegisterStartupScript(csType, csName, csOpenWindow.ToString(), False)

ただ.valueを.innerTextに変えただけではだめでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-26 11:17
引用:

きよよさんの書き込み (2007-01-26 10:44) より:

innerTextを調べて以下のように使ってみたのですが、やはりラベルを編集できません。
(テキストは従来とおり編集できました。)


というのは、

引用:

csOpenWindow.Append("window.opener.document." & "txta" & ".innerText = '" & 代入内容 & "' ;")


こちらは OK で、

引用:

csOpenWindow.Append("window.opener.document." & "lbla" & ".innerText = '" & 代入内容 & "' ;")


こちらは NG だったということでしょうか?
スクリプト エラーは、出力されませんでしたか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-01-26 11:39
引用:
--------------------------------------------------------------------------------


csOpenWindow.Append("window.opener.document." & "txta" & ".innerText = '" & 代入内容 & "' ;")

--------------------------------------------------------------------------------
こちらのテキストの代入はできました。


引用:
--------------------------------------------------------------------------------


csOpenWindow.Append("window.opener.document." & "lbla" & ".innerText = '" & 代入内容 & "' ;")

--------------------------------------------------------------------------------
こちらのラベルの代入ができませんでした。

>> スクリプト エラーは、出力されませんでしたか?
'スクリプトの実行
cs.RegisterStartupScript(csType, csName, csOpenWindow.ToString(), False)
この部分でエラーは発生しませんでしたが、正直言いましてスクリプトエラーを
どこで参照するかがわかりません。
(試しにJavaScriptの部分をでたらめなコードにしてデバッグしてみましたが、
 エラーが発生しなかったので・・・)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-26 12:04
引用:

きよよさんの書き込み (2007-01-26 11:39) より:

cs.RegisterStartupScript(csType, csName, csOpenWindow.ToString(), False)
この部分でエラーは発生しませんでしたが、


ここは、JavaScript 側のソースではないですよね。

引用:

正直言いましてスクリプトエラーをどこで参照するかがわかりません。
(試しにJavaScriptの部分をでたらめなコードにしてデバッグしてみましたが、
 エラーが発生しなかったので・・・)


いや、ブラウザでエラーは発生していますよ。
IE では、「スクリプトのエラーを通知しない」 のがデフォルトになっています。

オプションを設定し直すか、ブラウザのステータス バー左にあるエラーアイコンをクリックしましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-01-26 12:54
ご返信ありがとうございます。

スクリプトエラーを表示したところ、

window.opener.document.form1.lblaは
Nullまたはオブジェクトではありません。

というエラーでした。

やはりInnerTextの使い方が間違っているのでしょうか?

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