- - PR -
[ASP.NET]子画面から受け取った値を親画面に反映したい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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) 以上宜しく御願いいたします。 | ||||||||
|
投稿日時: 2008-11-19 13:11
> 子画面ではカレンダーを表示しており、日付をクリックするとクローズし、親画面のasp:labelの値を変えております。
labelは表示用のものなので、ポストバック時にサーバに値を返しません。 テキストボックス等の入力用のコントロールを使う必要があるでしょうね。 > ※asp:labelをasp:textboxへ帰ると、javascriptエラーでオブジェクトが宣言されていませんと表示されてしまう。 こちらの原因を調べて解決するのが早道かも。 | ||||||||
|
投稿日時: 2008-11-19 13:29
返信有難う御座います。
>labelは表示用のものなので、ポストバック時にサーバに値を返しません。 >テキストボックス等の入力用のコントロールを使う必要があるでしょうね。 なるほど。勉強不足でした。 TextBoxのTextChangedイベントで確認したいと思います。 後は、ユーザが操作出来ないようにしたいため、 TextBoxでReadOnly=Trueで設定して操作不可能にする。 >こちらの原因を調べて解決するのが早道かも。 この原因が一番不明なんですよね・・・。 他のコントロールもオブジェクトが宣言されていませんとでます。 何故LABELのみ良いのか調べてみます。 有難う御座います。 | ||||||||
|
投稿日時: 2008-11-19 14:06
TextBox でも ReadOnly=True にしたら駄目だったような気がします。 勘違いだったらすみません。
出力された HTML ソースを見れば一目瞭然じゃないですかね。 | ||||||||
|
投稿日時: 2008-11-19 19:03
お世話になります。
ReadOnly=trueでも行けました。 TextBoxのオブジェクトが存在してない件ですが、getElementByIdを使用していなかったためでした。 Labelだと.ClientIDのみで問題ないのに不思議です。 TextBoxに値を入れた後、他のボタンを押されると、元の値に戻ってしまうため、 document.forms[0].submit();でサーバ側の情報を更新しようとしたのですが、やはり元の値に戻ってしまいます。 どの様に更新をかけるべきでしょうか? | ||||||||
|
投稿日時: 2008-11-19 20:56
解決しました。
asp:TextBoxではなく、inputタグのtextを使用することによりサーバ側で値を保持しない様になったため、ポストバック発生時に値を取得する事が出来ました。 有難う御座いました。 |
1