- PR -

子フォームから親のマスタページを更新させるには(JavaScriptを使用せず)

投稿者投稿内容
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2007-05-11 15:00
お世話になります。
以前こちらで、Asp.Net 1.0 + VBのResponse.Write(JavaScript)で
子から親を更新させる方法を教えて頂きました。(本当にありがとうございました!)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37279&forum=7


そのご回答の最後に、
「 ASP.NETではResponse.Writeなどレスポンスを直接さわる必要はまずない」
といった感じの事を教えて頂けまして、目から鱗が落ちました。

自分でも、本当はそう出来ればいいなと感じておりましたので
JavaScriptを使わないやり方を探しておりましたが
すごく早い段階で行き詰ってしまった為、恐縮ですが質問させて頂きます。

環境は Asp.Net 2.0 + VBで、以下のような事をやりたいと思っております。


親フォーム   子フォーム
__________ _________
| | B |  |    |
|A |ボタン| | |
| |______| | |
|木| | | 更新 |
| | | | |
---------- ----------

親ページ
 A:マスタページ1
  木:TreeView
 B:マスタページ2(入れ子)
  ボタン:子フォームを開く

子ページ:TreeViewの枝の詳細
 更新:更新ボタン
    自分を閉じ、親ページを更新、もしくはTreeViewを再描画 ←※行き詰っています※


上の子ページのVBでの処理で行き詰っており、
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37084&forum=7

↑こちら様の
<%@ Reference VirtualPath="~/
が使えるかなと試してみたのですが、
ウェブフォームではなくユーザーコントロールだったようで出来ませんでした。

ただ、ご質問の中に
「ユーザーコントロールではなく、親のウェブフォームに直接置いてみたところ、
変更が即座に反映され意図した動作になった」と、
今の私が正にやりたいような事を書かれてありましたので

自分が分からないだけで、メジャーな方法があるのではないかと思い
識者様のお知恵をかして頂きたく思います。

(BT様のご意見を、大変低い理解度で引用させて頂き申し訳ございません)

どうぞよろしくお願いいたします。
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2007-05-11 15:07
ページの描画が完全に崩れて吃驚しました…
すみません。

親にマスタページが入れ子で二つあります。
マスタページ1にTreeViewがあり
マスタページ2のボタンから子フォームが開きます。

マスタ1のコンテンツはTreeView枝の概要で
子フォームはTreeView枝の詳細になります。

子では案件を削除、更新等を行いますので
子を閉じたタイミングで、TreeViewの再描画と概要ページの変更を
行いたいのですが、方法がわからなく行き詰っております。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-05-11 16:50
フォーム間に親子関係があって、その子から親を操作するというのであれば、
JavaScriptを使わないで、というのは無理じゃないでしょうか。
また、JavaScriptを利用する際は、そのために使うRegisterClientScriptBlockのような
メソッド等があるので、それを使うようにしましょう。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-05-11 17:21
引用:
そのご回答の最後に、
「 ASP.NETではResponse.Writeなどレスポンスを直接さわる必要はまずない」
といった感じの事を教えて頂けまして、目から鱗が落ちました。

自分でも、本当はそう出来ればいいなと感じておりましたので
JavaScriptを使わないやり方を探しておりましたが
すごく早い段階で行き詰ってしまった為、恐縮ですが質問させて頂きます。

レスポンスを直接さわらないことと、JavaScriptを使わないことは、まったく別の話ですよ。

引用:
自分を閉じ、親ページを更新、もしくはTreeViewを再描画 ←※行き詰っています※

[更新]というのが単一のリクエストで実現できるなら親ページをtargetにすることで
できなくもないのかもしれませんが、[自分を閉じ]はクライアントスクリプト使わないとできない気がします。
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2007-05-11 18:26
べる様

ご返答ありがとうございます。

>レスポンスを直接さわらないことと、JavaScriptを使わないことは、まったく別の話ですよ。

申し訳ございません。
せっかく前回ご回答頂いたHe様のご意見も、大変低い理解度で引用してしまいました。
土にめり込む思いで反省しております。

>、[自分を閉じ]はクライアントスクリプト使わないとできない気がします。

出来ない可能性を提示して頂いてとても感謝しております。
「閉じる」に関しては べる様のご意見を参考にJavaScriptで行おうと思います。

>[更新]というのが単一のリクエストで実現できるなら親ページをtargetにすることで
できなくもないのかも

すみません、是非こちらを知りたいのですが、
「target」でMsdn等を探しても
JavaScript関連しか見つかりませんでした。

何のプロパティにあたるのか、もう少し教えて頂けましたら大変嬉しいです。


>どっとねっとふぁん様

ご回答ありがとうございます。

>JavaScriptを利用する際は、そのために使うRegisterClientScriptBlockのような
>メソッド等があるので、それを使うようにしましょう。

ご教示ありがとうございます。
使用する際には、RegisterClientScriptBlockを使うようにします。

>フォーム間に親子関係があって、その子から親を操作するというのであれば、
>JavaScriptを使わないで、というのは無理じゃないでしょうか。

言葉尻を取ってしまうようで、大変恐縮なのですが、
もし「親子」ではなく「兄弟」、「親→子操作」の場合、
何かJavaScript以外の対処法があるのでしょうか。

ASP.NetもVBもまだまだ理解のレベルが低く
[兄弟]で可能かどうかも探し出せませんでした。

申し訳ございませんが、ご教授頂けたら嬉しいです。

どうぞよろしくお願いいたします。


[ メッセージ編集済み 編集者: MI 編集日時 2007-05-11 18:33 ]

[ メッセージ編集済み 編集者: MI 編集日時 2007-05-11 18:46 ]
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-05-11 19:21
引用:
>レスポンスを直接さわらないことと、JavaScriptを使わないことは、まったく別の話ですよ。

申し訳ございません。
せっかく前回ご回答頂いたHe様のご意見も、大変低い理解度で引用してしまいました。
土にめり込む思いで反省しております。

じゃあレスポンスを直接さわらないでどうするのかっていうのがRegisterClientScriptBlockとかになるわけですね。

引用:
>[更新]というのが単一のリクエストで実現できるなら親ページをtargetにすることで
できなくもないのかも

すみません、是非こちらを知りたいのですが、
「target」でMsdn等を探しても
JavaScript関連しか見つかりませんでした。

何のプロパティにあたるのか、もう少し教えて頂けましたら大変嬉しいです。

MIさんが引用されているスレッドでさんざん登場しているヤツです。例えば子画面で
<a href="page2.aspx" target="親" >
というリンクをクリックすれば親windowがpage2に変わりますね。ただ、よく考えたら親画面が
targetに指定できる名前を持ってないといけませんね。親がフレームの一部とかだったら
望みはあるかも。(そういう意味で、兄弟や親→子なら、できる、といえたのかも)

FORMデータをPOSTしたければ <form>に target="" をつけることででできますが、
この場合、子画面のPOST結果を親windowに表示するだけで親画面自体をsubmitすることはできません。

ところで、javascriptを使いたくない理由はなんでしょうか。ただ、あまり得意じゃない
とかならそれはそれで結構なのですが、別の部分(閉じるとか、親から子を開くもそうですよね)で
javascriptを使っている以上、非javascript化にこだわる必要はあまりないような気がします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-05-11 19:50
#「兄弟」ってどういう意味だろう。。。

Webで複数のウィンドウ間で片方からもう一方に対してなんらかの操作を行いたい
という場合、JavaScriptをまったく使わないでは難しいと思います。
MI
常連さん
会議室デビュー日: 2007/01/30
投稿数: 30
投稿日時: 2007-05-11 20:06
べる様

ご返答ありがとうございます。

引用:

じゃあレスポンスを直接さわらないでどうするのかっていうのがRegisterClientScriptBlockとかになるわけですね。



(やっと)理解できました。
詳しく教えて頂いて本当にありがとうございます。

引用:

>target
MIさんが引用されているスレッドでさんざん登場しているヤツです。例えば子画面で
<a href="page2.aspx" target="親" >
というリンクをクリックすれば親windowがpage2に変わりますね。ただ、よく考えたら親画面が
targetに指定できる名前を持ってないといけませんね。親がフレームの一部とかだったら
望みはあるかも。(そういう意味で、兄弟や親→子なら、できる、といえたのかも)



成る程!前回のframe+JavaScriptの動作を取り入れながら、考えてみようと思います。

「target」 は PreviousPage のような他のページを参照できるメソッドや、
PostBackUrl のような1.0には無かったプロパティがあるのかなと
勝手に想像して質問してしまいました。
すみません。

引用:

ところで、javascriptを使いたくない理由はなんでしょうか。



私事で恐縮ですが、他の人の可読性を上げたい、コンパイルエラーを利用したい、
という理由で VBの機能 を JavaScriptより優先しております。
VBで出来ないことであれば、JavaScriptを使うことに全く抵抗はないのですが
まだ出来るかどうかが、なかなか分からないレベルの為
皆様のお手を煩わせてしまっております。。。

ご回答頂いた方、読んで下さった方には深く感謝しております。


[ メッセージ編集済み 編集者: MI 編集日時 2007-05-11 20:16 ]

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