- - PR -
親画面のGridView内のボタンから子画面表示について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-01 23:28
お世話になります。
VS2005 VB.NETでWebアプリの開発を行っています。 質問です。 親画面のGridView内のボタンより子画面を表示しています。 親画面は社員一覧のようなもので、子画面にて詳細情報を更新しています。 親画面から子画面からの呼び出しは、ボタンが押された時に Page.ClientScript.RegisterStartupScriptでWindow.openしています。 子画面から親画面の更新は、子画面の更新ボタンが押された時に、 Page.ClientScript.RegisterStartupScriptで親画面をSubmitして、 子画面を閉じています。 子画面から更新ボタンを押されたら上手く動作します。 問題なのが、子画面を画面右上の×で閉じた場合、親画面からもう一度子画面を 開くときにGridView内のボタンを押したときに一度目は画面が更新されるだけで、 2度目に押した時に子画面が開きます。 (ココは恐らくenableEventValidation="false"にしないと、一度目のボタン押下時に 「無効なポストバック〜」エラーが出ると思います。) そこで考えたのが、子画面の<body>のOnUnloadイベント(クライアント側)にて、 親画面をSubmitして更新しようとしたのですが、 ×で閉じた場合はうまくいくのですが、 (但し、OnUnloadイベントなので子画面で更新ボタン以外でPostBackしても、 親画面が一回一回更新されます。。) 通常の更新ボタンを押した場合、OnUnloadで親画面を更新するのと 更新ボタンが押された時の親画面の更新とがダブるときがあり、 エラーがでたり、GridView内のTextBoxの内容が全て空白になったりと、 動作が不安定になります。 長文になりましたが、どなたかご教授願いませんか? | ||||
|
投稿日時: 2008-10-07 22:36
Startup Scrpit で子画面を開くのではなく、
読み込み済みの JavaScript に識別子を与えて開かせるようにする (親画面ではポストバックを発生させない) ようにしたら、どうなります? | ||||
|
投稿日時: 2008-10-10 15:17
Jittaさん返答ありがとうございます。
お返事遅れまして申し訳ないです。 引用: -------------------------------------------------------------------------------- Startup Scrpit で子画面を開くのではなく、 読み込み済みの JavaScript に識別子を与えて開かせるようにする -------------------------------------------------------------------------------- 試してみた所、うまくいきました! 但しこの場合、クエリ文字列で子画面に情報を渡すことになると思うのですが、 (親画面[社員一覧]から、子画面[社員詳細情報]を開くときは、社員IDを渡す) クエリ文字列ではなくSession変数でIDを渡したいのです。。。 そこで、子画面を開くときのRegisterStartupScriptで Window.Openの後に、自分自身(親画面)をSubmit()する記述を追加しました。 これで、一応子画面を×で閉じても1度のクリックで子画面が開くようになりました。 ただ、ボタン押した時とSubmit()する時で2度PostBackしていて、 画面のちらつきが気になるところです。。。 | ||||
|
投稿日時: 2008-10-10 17:40
ボタンのonClientClickに
"子画面を開く関数(それぞれの社員コード);return false;" と画面表示時に設定してやれば親画面はポストバックしないでいいような気もします。 まぁ、その場合はクエリ文字列になっちゃうんですけどね。 | ||||
|
投稿日時: 2008-10-11 17:05
よくあるのが、サブウインドウを開くときは全て共通ページ(値の格納と各ページへのリダイレクトをするだけのページ)を一度通過させる方法。 こいつを真っ白なページにするか、現在ロード中ですみたいなメッセージを出しておくか。 _________________ かるあ のメモ と スニペット | ||||
|
投稿日時: 2008-10-11 21:07
昔、自分が遭遇したか、同じ質問に答えたように記憶しているのですが、それを探すことができませんでした。(ので、先の回答だった。)
StartupScript を使ったのが悪かったか、ポップアップブロッカーが関係していたか、とにかく記憶があやふやで。。。申し訳ない。(とか書いておくと、誰かが探し出してくれるかもしれないと、期待してみる) |
1