none
【ASP.NET 2.0】子画面のオープン時にちらつきを抑える方法 RRS feed

  • 質問

  • はじめまして。初めて質問させていただきます。

     

    あるWindows(以下、親画面)から、別のWindows(以下、子画面)をオープンする処理を

    作成しようとしています。

     

    たとえば、郵便番号から住所を取得するイメージで、親画面のボタンを押下すると

    子画面にて郵便番号と住所の一覧(グリッド)が出力され、その1つを選択し「OK」ボタンを押下すれば、

    子画面が閉じ、親画面の「住所」テキストボックスに子画面にて選択された

    住所が表示されるようなイメージです。

     

    ここで、子画面を表示するボタンを押下すると、親画面、子画面ともにページ更新がかかり、

    子画面から親画面に戻るときも親画面にてページ全体が更新されます。

     

    できれば、このちらつきをできるだけ抑えたいと思っているのですが、

    何かいい方法はないでしょうか。

     

    AjaxのUpdate Panelを使用し、その中に子画面を開くボタンをいれたりしましたが、

    そうするとボタンを押下しても子画面がでなくなってしまいました。

     

    子画面から値を取得するようなWebページはWebシステムではよくあるかと思います。

    よりよい方法があればご教授いただけないでしょうか

     

    よろしくお願いいたします。

     

    <以下、環境>

    ・Windows XP SP2

    ・Visual Web Developer 2005 Express Edition

    ・.netFramework 2.0

    ・ASP .net 2.0 Ajax

     

    2008年2月25日 3:36

回答

  • > 子画面を開くこと自体はJavaScriptでできたのですが、

    > 値をうけとり親画面にて処理をする場合にうまくいきませんでした。

     

    この話と最初に子画面を開くときにちらつく話はまったく別の処理になりますよね。

    切り分けて考えたほうがよいと思います。

    ここまでできているなら、最初の質問のほうは自分で解決できていますよね。

     

    で、子画面からデータを戻すときですが、子画面から親画面にデータを渡し、

    そこからsubmitを実行させるのが楽だとは思います。

    このとき親画面がちらつきますね。

    そこまで制御したい、というなら親画面のほうでデータをもらったあとの処理を

    完全にJavaScriptの操作で行うようにする必要があるでしょう。

    たぶんUpdatePanelのようなコントロールを利用しようとするといたずらに複雑に

    なる可能性もあるので、AJAX Libraryに含まれるJavaScriptのライブラリを

    直接利用して自分で表示の変更まで制御するほうがいいんじゃないかと思います。

     

    2008年2月25日 6:42

すべての返信

  • > ここで、子画面を表示するボタンを押下すると、親画面、子画面ともにページ更新がかかり、

    > 子画面から親画面に戻るときも親画面にてページ全体が更新されます。

     

    ボタンを押したときにPostBackが発生しているんでしょうね。
    このPostBackがなぜ発生するのか、という理屈はわかっているでしょうか?

    PostBackを発生させないようにして、ボタンを押したら子WindowをオープンするようなJavaScriptが動作するようなプログラムを記述すれば問題は解決すると思います。

    方法はいろいろあるので調べてみるといいかと。

     

    まぁ、まずはブラウザとサーバ上で何がどのように動作しているのかきちんと考えてみることから始めるのがよいと思いますが。。。

    2008年2月25日 3:59
  • >PostBackを発生させないようにして、ボタンを押したら子WindowをオープンするようなJavaScriptが動作するようなプログラムを記述すれば問題は解決すると思います。

    >方法はいろいろあるので調べてみるといいかと。

     

    なるほど。

    ボタンを押せばPostBackが発生するのは理解できるのですが(誤解かもしれませんが)、

    PostBackさせないで子画面からデータを受け取れないものかと考えておりました。

    子画面を開くこと自体はJavaScriptでできたのですが、

    値をうけとり親画面にて処理をする場合にうまくいきませんでした。

    できるだけネットワーク上の負荷を下げるよう、子画面からはキー項目のみ取得し、

    親画面にて再度DBに問い合わせる、というようなやり方をしております。

    (子画面からも親画面からもDBに問い合わせしているので、画面がちらつくのも当然かもしれませんが・・・。

     表示範囲以外もちらつくので、抑制できないかな、と・・・)

     

    >まぁ、まずはブラウザとサーバ上で何がどのように動作しているのかきちんと考えてみることから始めるのがよいと思いますが。。。

     

    たしかに・・・。再度確認し基礎を復習してみます。

    ありがとうございます。

    2008年2月25日 6:01
  • > 子画面を開くこと自体はJavaScriptでできたのですが、

    > 値をうけとり親画面にて処理をする場合にうまくいきませんでした。

     

    この話と最初に子画面を開くときにちらつく話はまったく別の処理になりますよね。

    切り分けて考えたほうがよいと思います。

    ここまでできているなら、最初の質問のほうは自分で解決できていますよね。

     

    で、子画面からデータを戻すときですが、子画面から親画面にデータを渡し、

    そこからsubmitを実行させるのが楽だとは思います。

    このとき親画面がちらつきますね。

    そこまで制御したい、というなら親画面のほうでデータをもらったあとの処理を

    完全にJavaScriptの操作で行うようにする必要があるでしょう。

    たぶんUpdatePanelのようなコントロールを利用しようとするといたずらに複雑に

    なる可能性もあるので、AJAX Libraryに含まれるJavaScriptのライブラリを

    直接利用して自分で表示の変更まで制御するほうがいいんじゃないかと思います。

     

    2008年2月25日 6:42
  • おっしゃるとおり、UpdatePanel等安易に使うと複雑になりかねないので、

    今回はAjaxは考えずに、シンプルに考えようと思います。

     

    ご教授いただきました方法ですと、完全にちらつきをなくすには

    完全なJavaScriptの操作となりそうですので、

    できるだけ楽に実装できるように考えると、ある程度の妥協は

    やむを得ないと感じました。

    基礎を確認するとともに、じっくり検討してみたいと思います。

     

    迅速な回答ありがとうございました。

    2008年2月25日 12:01