MaintainScrollPositionOnPostBack


PostBackが発生した際、ページのスクロールバーの位置を保持しておくプロパティ
.NetFrmawork2.0からの機能


このプロパティをTrueにしておくと、スクロールバーのあるような大きなページで
PostBackが発生した場合にページの先頭に移動しなくなる





使用例は以下の通り


ScrollPosition.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ScrollPosition.aspx.vb" Inherits="ScrollPosition" MaintainScrollPositionOnPostBack="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        
            <asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True">
                <SelectedRowStyle BackColor="#80FFFF" />
            </asp:GridView>

            <asp:Button ID="Button1" runat="server" Text="Button" />&nbsp;&nbsp;

    </div>
    </form>
</body>
</html>

※PageディテクティブでMaintainScrollPositionOnPostBackをTrueに指定




ScrollPosition.aspx.vb

Partial Class ScrollPosition
    Inherits System.Web.UI.Page

    Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load

        If IsPostBack = False Then
            Call GridView_DataSet()
        End If

    End Sub

    'GridViewにDataSetを連携
    Private Sub GridView_DataSet()
        Dim dt As New Data.DataTable
        Dim dr As Data.DataRow
        Dim i As Long

        '列の定義
        dt.Columns.Add(New Data.DataColumn("hogeNo", GetType(Integer)))
        dt.Columns.Add(New Data.DataColumn("hogeName", GetType(String)))


        '値を設定
        For i = 1 To 50
            dr = dt.NewRow()
            dr(0) = i
            dr(1) = "harada" & i
            dt.Rows.Add(dr)
        Next

        GridView1.DataSource = dt
        GridView1.DataBind()
    End Sub

End Class

なお、スクロールが保持されるのはページのスクロールバーだけである
divタグやPanelタグ等で作成したスクロールバーの位置は保持されない


divタグのスクロールバーを操作したい場合、Javascript等でscrollTopの値を設定したりする必要がある



動作確認環境:Visual Stadio 2005