- PR -

ASP.NETにおけるウィドウ間のフォームデータ送信について

投稿者投稿内容
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-11-02 12:21
引用:

・JavascriptでWindow(1)のButton Aのonclickイベントにwindow.open()を使用して
Windows(2)を開く。



Window(1)で選択されたものの状態をクエリで渡す。
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 2006-11-02 14:45
>Jitta様

ご返信いただきありがとうございます。

>ページ2が表示される前に、必ずサーバ コードが走ります。

この、「サーバ コードが走ります。」とは、ページ1のコードでしょうか?
(ページ2のoninitよりも、ページ1のoninitが必ず先に実行されるという意味でしょうか??)

>ですから、セッション情報がセットされるまで、ページ2の送信を延期しても良いですね。

以下の認識であっていますでしょうか?

-----
必ずページ1が先に実行されるので、

・ページ1のoninit実行
ロック開始(mutex等)

・ページ2のoninit実行
ロックされているので待つ

・ページ1のボタンクリックイベント実行
選択項目保存
ロック解除

→ページ2のoninitでロックが解除され
続きを実行
-----

>ぜうす様

ご返信いただきありがとうございます。

>3.window(1)表示時に全ての情報をSessionに設定しておき、最低限の情報だけwindow(2)にGETで渡す手す...安直?

すみません、GETで渡すというのがわかりませんでした。
#Window(2)がGetするのは、HTMLの"onclick"で書かれているURLなので、
#フォームのデータを取ることはできないのかなと思ったんですが。。。

>4.window(1)のbutton押下時にAJAXでSessionに設定してからwindow(2)を開く

AJAX・・・すみません、勉強不足です。
便利そうですね!今回は使用できないかもしれませんが、
次の機会に使用してみようとおもいます。
ありがとうございます。


>なんか、小手先で誤魔化そうとしているような...。

>皆さんが言うように、DB検索を早くするのが一番シンプルでわかりやすい回答ではないでしょうか。
>複雑怪奇なJavaScriptはメンテ出来ませんぜ〜、旦那!

そうなんですよね・・・・いろいろ無駄な処理が多いせいで処理が遅くなってしまっているのかも
しれません。
JavascriptとASP.NETは、併用しようとすればするほど泥沼化してしまっています・・・(@x@;)

-------

結果として、結局、別Window化を止めることにしました。
→Window(1)でのクリックイベント処理後、Window(2)へリダイレクトさせることになりました。
この方法が一番変更が少なそうであるためです。
お騒がせいたしまして申し訳ありません。
(Javascriptに手を出せなかった臆病者です。)

ご助言いただきました皆様、どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-11-02 21:56
引用:

Hildaさんの書き込み(2006-11-02 14:45)より:
>ページ2が表示される前に、必ずサーバ コードが走ります。

この、「サーバ コードが走ります。」とは、ページ1のコードでしょうか?
(ページ2のoninitよりも、ページ1のoninitが必ず先に実行されるという意味でしょうか??)

>ですから、セッション情報がセットされるまで、ページ2の送信を延期しても良いですね。

以下の認識であっていますでしょうか?

-----
必ずページ1が先に実行されるので、

・ページ1のoninit実行
ロック開始(mutex等)

・ページ2のoninit実行
ロックされているので待つ

・ページ1のボタンクリックイベント実行
選択項目保存
ロック解除

→ページ2のoninitでロックが解除され
続きを実行
-----


いえ、違います。ページ1とページ2の、どちらが先に実行されるかは、保証されていません。

 そうではなく、ページ単体で見たとき、サーバ コードが実行された後にクライアントに返され、クライアント上のスクリプトが実行される、ということです。ですから、クライアントのスクリプトで細工するのではなく、サーバの中で待ちましょう、ということでした。

 ページ1とページ2の処理は別個に、並行に処理される前提で考えます。
-----
ページ1の、GET に対する処理:
 ページ2の読み込みを遅延させるためのセッション変数(仮に "PAGE2LOCK")をクリア

ページ1の、ページ2への遷移(POST)で発生する処理:
 ページ2で表示するべきデータを作成する
 セッション変数 "PAGE2LOCK" を書き込む(値は何でもよい)

ページ2の、GET に対する処理:例1
 セッション変数 "PAGE2LOCK" があるか、チェックする
 ない場合、適当に遅延する
  セッションへ数のチェックに戻る
 ある(出来た)場合、本来の処理をする

ページ2の、GET に対する処理:例2
 セッション変数 "PAGE2LOCK" があるか、チェックする
 ない場合、ページ3へ Transfer
 ある場合、本来の処理をする

ページ2の、GETに対する処理 例2のページ3:
 適当な時間の後、ページ2へ Refresh する 空白の HTML
-----

_________________
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 2006-11-04 12:17
返信がおそくなってしまってすみません.

>todo様

返信いただきありがとうございました.

>Window(1)で選択されたものの状態をクエリで渡す。

ボタンのonclickイベントをただ"window.open"にするのではなく,
"現在のwindow(1)のfromをクエリにくっつけてwindow(2)をwindow.open"という処理にすれば実現
出来そうですね.ありがとうございます.

>Jitta様

返信いただきありがとうございました.

>そうではなく、ページ単体で見たとき、サーバ コードが実行された後にクライアントに返され、
>クライアント上のスクリプトが実行される、ということです。ですから、クライアントの
>スクリプトで細工するのではなく、サーバの中で待ちましょう、ということでした。

解説ありがとうございます.
Window(1)のイベント処理が終わるまで,Window(2)の表示を待つという意味ですね.
Window(2)でのタイムアウト対策さえ入れれば実現できそうですね.
ありがとうございました.

[ メッセージ編集済み 編集者: Hilda 編集日時 2006-11-04 12:20 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-11-04 15:39
えーちょっと気になったので。
サーバ側処理でセッション使った待ち合わせはやっちゃだめです。
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 2006-11-06 01:08
なちゃ様

ご返信いただきありがとうございました。

今回は、「セッションを使った待ち合わせ」は使用しないつもりです。(^^;)
#「ちゃんと」作らないといろいろ問題おきそうですしね・・・

今回は、(既に返信もさせていただいていますが、)
ウィンドウ化はあきらめ、ページの遷移で対処することにいたしました。
(クリックイベント→保存処理→RedirectまたはTransferで別ページに遷移
とすることにしました。

ご心配頂きありがとうございます。

[ メッセージ編集済み 編集者: Hilda 編集日時 2006-11-06 01:09 ]

[ メッセージ編集済み 編集者: Hilda 編集日時 2006-11-06 01:09 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-11-06 22:00
引用:

なちゃさんの書き込み(2006-11-04 15:39)より:
えーちょっと気になったので。
サーバ側処理でセッション使った待ち合わせはやっちゃだめです。


Jittaの書き込み(2006-11-02 21:56)の場合、ページ1側の処理が何らかの都合でセッションに書き込みを行わず終了した場合、ページ2が終われなくなります。
 単にページ2が終われないだけならかまわないのですが、その為にワーカープロセスが再起動するタイミングが無くなることがあるかもしれません(リクエストが無くなってから何分後、の指定をしている場合)。


Web アプリって、難しい。。。

_________________
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2006-11-07 12:06
引用:

Jittaさんの書き込み (2006-11-02 21:56) より:
 ページ1とページ2の処理は別個に、並行に処理される前提で考えます。

ページ2の、GET に対する処理:例1
 セッション変数 "PAGE2LOCK" があるか、チェックする
 ない場合、適当に遅延する
  セッションへ数のチェックに戻る
 ある(出来た)場合、本来の処理をする



同一セッションのリクエストだから、並行に処理されないのでは?
ページ2が処理された後にページ1が処理される。
ページ2での「セッション使った待ち合わせ」は、確実に無限ループになると思います。

クライアントより複数の要求が来た場合の動作について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30440&forum=7&start=8


[ メッセージ編集済み 編集者: todo 編集日時 2006-11-07 12:16 ]

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