4

サーバーのポストバック後にスクロールバーの位置を維持するために、web.configで次のコードを使用しました。

<pages maintainScrollPositionOnPostBack="true" >
</pages>

すべて正常に動作していますが、今ではdiv内にスクロールバー(内部スクロールバー)を備えたグリッドビューがdiv内にカプセル化されています。

グリッドビュー内の行の1つでイベントが発生すると、内部スクロールバーは外部スクロールバーとは異なり、元の位置を維持しません。

何か案は?

4

4 に答える 4

18

将来の参考のために:

通常の手順は、web.configファイルに次のように書き込むことです。

  <system.web>
    <pages maintainScrollPositionOnPostBack="true" >
    </pages>
  </system.web>

これにより、すべてのWebページのスクロールバーの位置が保持されます。

グリッドビュー(またはdiv)内にスクロールバーがある場合は、次のスクリプトを使用します。

<script type="text/javascript">
    window.onload = function () {
        var strCook = document.cookie;
        if (strCook.indexOf("!~") != 0) {
            var intS = strCook.indexOf("!~");
            var intE = strCook.indexOf("~!");
            var strPos = strCook.substring(intS + 2, intE);
            document.getElementById("grdWithScroll").scrollTop = strPos;
        }
    }
    function SetDivPosition() {
        var intY = document.getElementById("grdWithScroll").scrollTop;
        document.cookie = "yPos=!~" + intY + "~!";
    }
</script>

また、divは次のようにする必要があります。

<div id="grdWithScroll" …………  onscroll="SetDivPosition()">

http://michaelsync.net/2006/06/30/maintain-scroll-position-of-div-using-javascript-aspnet-20

于 2012-08-28T07:57:04.637 に答える
3

これを試して、

 <script type="text/javascript">
  window.onload = function () {
               var h = document.getElementById("<%=hfScrollPosition.ClientID%>");
               document.getElementById("<%=scrollArea.ClientID%>").scrollTop = h.value;
              }
   function SetDivPosition() {
           var intY = document.getElementById("<%=scrollArea.ClientID%>").scrollTop;
           var h = document.getElementById("<%=hfScrollPosition.ClientID%>");
           h.value = intY;
     }

  function afterpostback() {

            var h = document.getElementById("<%=hfScrollPosition.ClientID%>");
            document.getElementById("<%=scrollArea.ClientID%>").scrollTop = h.value;

     }

</script> 

 <asp:HiddenField ID="hfScrollPosition" runat="server" Value="0" />
 <div id="scrollArea" onscroll="SetDivPosition()"   runat="server"  style="height:225px;overflow:auto;overflow-x:hidden;"> 

Page_Loadで

if (Page.IsPostBack) {
    ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "CallJS", "afterpostback();", true);
    }
于 2013-06-27T07:37:02.007 に答える
2

私は長い長い説明と説明を持っていません、最も重要な部分はこれらのコードが私のプロジェクトで機能することです。

<script  type="text/javascript">
// This Script is used to maintain Grid Scroll on Partial Postback
var scrollTop;
//Register Begin Request and End Request 
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
//Get The Div Scroll Position

function BeginRequestHandler(sender, args) 
{
var m = document.getElementById('divGrid');
scrollTop=m.scrollTop;
}
//Set The Div Scroll Position
function EndRequestHandler(sender, args)
{
var m = document.getElementById('divGrid');
m.scrollTop = scrollTop;
} 
</script>

これはhttp://www.codeproject.com/Articles/30235/Maintain-GridView-Scroll-Position-and-Header-Insidからのものです

于 2016-08-25T05:59:51.603 に答える
1

やりたいことはできますが、jQueryのようなものを使ってクライアント側で行う必要があります。$(document).ready次のチュートリアルでは、jQueryを使用してGridViewコントロール内のスクロールバーの値を決定し、関数が呼び出されるたびにその値を復元します。このようにして、スクロールバーはポストバック前の位置にリセットされます。

jQueryを使用してGridViewでスクロール位置を簡単に維持

于 2012-08-23T13:48:54.177 に答える