- PR -

[ASP.NET]子画面から受け取った値を親画面に反映したい

1
投稿者投稿内容
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2008-11-19 12:12
お世話になります。

現在親画面からRegisterStartupScriptを使用してwindow.showModalDialogで子画面を開き、子画面のwindow.returnValueで親画面のasp:labelに対して値を入れる事はできました。
しかし、表示は変わってはいますが、親画面でポストバックが発生する処理を行わせ、asp:labelの値を確認したところ、子画面から受け取ったデータではなく、元のデータが入っておりました。

親画面の表示だけではなく、ポストバック発生時にasp:labelから取り出した値が、子画面のデータとして取得するにはどうしたら良いでしょうか?

子画面ではカレンダーを表示しており、日付をクリックするとクローズし、親画面のasp:labelの値を変えております。

[親画面]
Dim startupScript As String
startupScript = String.Format Label1.ClientID ".innerText=window.showModalDialog('test.aspx', 'Calendar', 'location=no,toolbar=no,menubar=no,scrollbars=yes,status=yes,resizable=yes,width=100,height=100');")
startupScript = "<SCRIPT LANGUAGE='javascript'>" & startupScript & "<" & "/SCRIPT>"
ClientScript.RegisterStartupScript(Page.GetType, "start", startupScript)
※asp:labelをasp:textboxへ帰ると、javascriptエラーでオブジェクトが宣言されていませんと表示されてしまう。

[子画面]
Dim strURL As String = String.Format("window.returnValue='{0}'; window.close();", calDateStr)
strURL = "<script language='Javascript'>" & strURL & "<" & "/script>"
ClientScript.RegisterStartupScript(Page.GetType(), "end", strURL)

以上宜しく御願いいたします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-11-19 13:11
> 子画面ではカレンダーを表示しており、日付をクリックするとクローズし、親画面のasp:labelの値を変えております。

labelは表示用のものなので、ポストバック時にサーバに値を返しません。
テキストボックス等の入力用のコントロールを使う必要があるでしょうね。

> ※asp:labelをasp:textboxへ帰ると、javascriptエラーでオブジェクトが宣言されていませんと表示されてしまう。

こちらの原因を調べて解決するのが早道かも。
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2008-11-19 13:29
返信有難う御座います。

>labelは表示用のものなので、ポストバック時にサーバに値を返しません。
>テキストボックス等の入力用のコントロールを使う必要があるでしょうね。

なるほど。勉強不足でした。
TextBoxのTextChangedイベントで確認したいと思います。
後は、ユーザが操作出来ないようにしたいため、
TextBoxでReadOnly=Trueで設定して操作不可能にする。

>こちらの原因を調べて解決するのが早道かも。

この原因が一番不明なんですよね・・・。
他のコントロールもオブジェクトが宣言されていませんとでます。
何故LABELのみ良いのか調べてみます。

有難う御座います。


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-11-19 14:06
引用:
TextBoxでReadOnly=Trueで設定して操作不可能にする。


TextBox でも ReadOnly=True にしたら駄目だったような気がします。
勘違いだったらすみません。

引用:
>こちらの原因を調べて解決するのが早道かも。
この原因が一番不明なんですよね・・・。


出力された HTML ソースを見れば一目瞭然じゃないですかね。
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2008-11-19 19:03
お世話になります。

ReadOnly=trueでも行けました。

TextBoxのオブジェクトが存在してない件ですが、getElementByIdを使用していなかったためでした。
Labelだと.ClientIDのみで問題ないのに不思議です。

TextBoxに値を入れた後、他のボタンを押されると、元の値に戻ってしまうため、
document.forms[0].submit();でサーバ側の情報を更新しようとしたのですが、やはり元の値に戻ってしまいます。

どの様に更新をかけるべきでしょうか?
レイル
常連さん
会議室デビュー日: 2008/10/14
投稿数: 37
投稿日時: 2008-11-19 20:56
解決しました。

asp:TextBoxではなく、inputタグのtextを使用することによりサーバ側で値を保持しない様になったため、ポストバック発生時に値を取得する事が出来ました。

有難う御座いました。
1

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