- PR -

スクロール位置を自由に設定したい

1
投稿者投稿内容
ワイルドストロベリー
会議室デビュー日: 2007/06/20
投稿数: 11
投稿日時: 2008-02-28 17:15
何時もお世話になってます。

VB.netで開発をしています。
一つのWebページに複数のGridViewとButtonコントロールがあります。

そこで、基本的にコントロールを操作してPage_Loadがかかった時に画面が一番上になってしまうのを
防ぐためにPage_Load内でMaintainScrollPositionOnPostBackをTrueにしているのですが
操作にエラーがあった場合エラーメッセージを画面の一番上のLabelに表示しています。

そこで、このエラーメッセージを表示する時だけ画面を上に移動したいのです。

MaintainScrollPositionOnPostBackをTrueにしたりFolseにしたりしてみたのですが
自分が置くタイミングが悪いのか上手くいかなかったり、
AutoScrollPosition を使ってみたりしましたが自分だけではうまく動作しませんでした。

ご教授いただけたらと思います。
よろしくお願いします。

くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-28 18:34
これが正しいやり方かは、わかりませんが・・・

スクロール位置復元のスクリプトを見るとwindow.onloadイベントを差し替えて
スクロール位置を復元し、最後に元々のwindow.onloadを呼び出しているので
Top位置に戻したい時は、Topに戻すスクリプトをwindow.onloadに吐き出しておけば
いいのでは?と思います。

MaintainScrollPositionOnPostBackは常にTrueとして・・・
以下サンプル
コード:

'' エラーの為、Topにスクロール位置を戻すのです!
Dim script As New System.Text.StringBuilder
script.Append("var myOldOnLoad = window.onload;¥n")
script.Append("window.onload = function() {¥n")
script.Append(" window.scrollTo(0,0);¥n")
script.Append(" if ((typeof(myOldOnLoad) != ""undefined"") && (myOldOnLoad != null)) {¥n")
script.Append(" return myOldOnLoad();¥n")
script.Append(" }¥n")
script.Append("}¥n")

ClientScript.RegisterStartupScript(Page.GetType(), "", script.ToString(), True)


#上記中の「¥n」は小文字で記述。

[追加]
前述のスクリプトよりこっちの方が少ないからいいかも。
コード:

script.Append("document.getElementById(""__SCROLLPOSITIONX"").value = 0;¥n")
script.Append("document.getElementById(""__SCROLLPOSITIONY"").value = 0;¥n")



[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-28 18:50 ]
ワイルドストロベリー
会議室デビュー日: 2007/06/20
投稿数: 11
投稿日時: 2008-02-29 10:06
くまっちさん>

ご返答ありがとうございます。

上記のソースで動作せる事が出来ました!
ありがとうございました。
1

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