- PR -

別ウィンドウを開くタイミング

投稿者投稿内容
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2005-03-31 12:42
引用:

Jittaさんの書き込み (2005-03-30 17:44) より:

ウインドウAにあるボタンが、ウインドウBを開き、ウインドウBに表示するデータを、ウインドウAにあるボタンのサーバサイドコード(イベントハンドラ)で作成しているなら、順序は不定でしょうね。

# デバッグしている限り、要求がきた順に順次処理されているようなのですが、
# HTTPサーバに要求されることからして、そんなはずはないでしょう。




ということは、ウィンドウAにあるボタンでJavascriptを使って、
表示データに必要な値をウィンドウBに渡して、ウィンドウBのイベントハンドラで
データを作成して表示した方が良いのでしょうか?
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-03-31 14:36
ん?解決したようだったのでROMってましたが、ちょっと勘違いしてたかも。

引用:

カウンターさんの書き込み (2005-03-30 14:08) より:

引用:

ぼのぼのさんの書き込み (2005-03-30 13:58) より:
ちょっと質問。
下フレームにあるボタンは別ウィンドウを開くものだけでしょうか?
それとも、他に下フレーム自身にポストバックさせるような他のボタンも存在しますか?


ぼのぼのさん、ありがとうございます。
このボタンでは別ウィンドウを開く他に、そのウィンドウに表示するデータを作成する処理を
ボタンのクリックイベントで行っています。
また、下フレームにはもう一つボタンがありますが、そのボタンを押した場合にも
同様の現象が発生しています。


この書き込みの中の、「そのウィンドウに表示するデータを作成する処理」ってとこの、「そのウィンドウ」ってのは、ひょっとして開いた子画面の方ですか?
#親画面(フレームB)の方だと思っていた
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2005-03-31 14:57
引用:

ぼのぼのさんの書き込み (2005-03-31 14:36) より:
ん?解決したようだったのでROMってましたが、ちょっと勘違いしてたかも。

この書き込みの中の、「そのウィンドウに表示するデータを作成する処理」ってとこの、「そのウィンドウ」ってのは、ひょっとして開いた子画面の方ですか?
#親画面(フレームB)の方だと思っていた



その通りです。子ウィンドウで表示するデーターです。

ウィンドウA → 親フォーム
ウィンドウB → 子フォーム

ちなみに、ウィンドウAにあるボタンでJavascriptを使って、
表示データに必要な値をウィンドウBに渡して、ウィンドウBのイベントハンドラで
データを作成して表示

という方法で、問題なく動いていますので一応解決はしています。
ただ、投稿当初の方法では処理順序が保障されないとの指摘がありましたので
上記の方法で良いものか気になりまして。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-03-31 15:34
引用:

カウンターさんの書き込み (2005-03-31 14:57) より:
ちなみに、ウィンドウAにあるボタンでJavascriptを使って、表示データに必要な値をウィンドウBに渡して、ウィンドウBのイベントハンドラでデータを作成して表示という方法で、問題なく動いていますので一応解決はしています。
ただ、投稿当初の方法では処理順序が保障されないとの指摘がありましたので上記の方法で良いものか気になりまして。


この方法なら大丈夫でしょう。処理順序関係ありませんから ボタンクリック時、親画面のサーバサイドは実質何もやってないわけですよね?実は親画面側はPostBackさせる必要すらない?
ちなみに、別案としてこんな方法もあります。

コード:


@親画面のaspxに以下のjavascript関数を追加
<script language="javascript">
function ChangeTarget(t) {
if(t == 1) {
//URLを空にしてるのと第二引数で名前をつけてるのがミソ
window.open('','WinName1', 'width=470,height=620');
Form1.target = "WinName1";
} else {
Form1.target = "_self";
}
}
</script>
A親画面のaspx.vb
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Me.Button1.Attributes("onclick") = "ChangeTarget(1)"
End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'ここにデータ作成処理を書いてSessionに格納
'popup.aspxの方で作成処理を行うならキーだけSessionに格納
Response.Redirect("popup.aspx")
End Sub


要するに親画面のPost先を子画面にしてるんですが、これだと順番が保証されます。
ただ、PostBackの基本原則に逆らったやり方らしく、ドロップダウンリストのSelectedIndexChangedイベントとかでは使わない方がいいみたいです…
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20246&forum=7&11
ボタンのClickイベントなら問題ないような気もしますが、カウンターさんが現行とっている方法の方が無難なんでしょうね…

[ メッセージ編集済み 編集者: ぼのぼの 編集日時 2005-03-31 15:52 ]
カウンター
大ベテラン
会議室デビュー日: 2004/02/19
投稿数: 123
投稿日時: 2005-03-31 16:01
お〜、そんな方法もあるんですね

試してみたら、ウィンドウBにウィンドウAの内容が表示されてしまいました。

時間がないので、現行のまま行きますが。勉強になりました。
ありがとうございます。

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