ぺやろぐ

ぺやろぐ

焼きそばよりチャーハンが好き。

〔C#〕〔ASP.NET〕showModalDialogの呼び出し時に親画面のスクロール位置が初期位置に戻ってしまうのを防ぐ

スポンサーリンク


まるで、ラグのよう。
どうも、ぺやんぐです。


ASP.NETは難しいねってお話。

◆目的

JavaScriptで子画面を表示した時に親画面のスクロール位置を保持できるようにする。


◆経緯

ASP.NETで開発をしていて、子画面を表示した時に親画面のスクロール位置がリセットされた。
MaintainScrollPositionOnPostbackをtrueにしているにも関わらず……。

子画面はJavaScriptのwindow.showModalDialogを使用して開いている。
ボタンクリックイベントからJavaScriptの設定をしている。

とまぁ、こんな状況だったんで解決方法を調べてみると意外と見つからなくて少々困った。(よくある話だと思ってた)
結局、微妙な英語力を頼りに見つけたのが以下の記事
https://forums.asp.net/t/1759352.aspx?call+function+after+maintainScrollPositionOnPostback+

なんとなーく、同じ悩みな気がする……。
これかなってことで、ごちょごちょしてみると期待通りの動きをしたので日本語版としてここに残しておこうと思う。


◆実装

以下コード


showModalDialogの呼び出し時に親画面のスクロール位置が初期位置に戻ってしまうのを防ぐ


細かい動きが追えていないので、はっきりとは言えないがどっかのタイミングでスクロール位置がリセットされるのを、「if (WebForm_RestoreScrollPosition) WebForm_RestoreScrollPosition();」この1文(2文?)で再度セットしているみたい。
個人的には原理不明のまま使うのは嫌なんだけど、検索力が低いためこれに関する情報が手に入らなかった……。(英語が読めていないだけの可能性……)

MaintainScrollPositionOnPostbackをtrueにしている時はhtmlソースに「window.onload = WebForm_RestoreScrollPosition;」が追加されるので、あながち変な実装でもないと思いたい。(願望


◆まとめ

こんな中途半端な状態で記事にするのはどうかと思ったけど、同じような悩みの人の足掛かりにでもなれれば幸い……。
詳しい方はぜひコメントをお願いいたします。