在部分回发ASP.NET上保持面板滚动位置

在部分回发ASP.NET上保持面板滚动位置,asp.net,updatepanel,postback,scroll,Asp.net,Updatepanel,Postback,Scroll,我有一个放置在ASP.NET面板中的gridview。 panel和Gridview都位于UpdatePanel中。 gridview中有一列导致部分回发。 我想在这些回发上保持面板滚动位置。 有办法吗? 关于。asp.net中没有内置的工具来解决此问题 然而,这个问题有一个解决办法;您需要使用javascript来处理它 这里提到了解决方案: 2012年5月20日编辑;看了评论之后 //将此JavaScript代码放在ScriptManager1之后很重要 var xPos,yPos; va

我有一个放置在ASP.NET面板中的gridview。 panel和Gridview都位于UpdatePanel中。 gridview中有一列导致部分回发。 我想在这些回发上保持面板滚动位置。 有办法吗?
关于。

asp.net中没有内置的工具来解决此问题

然而,这个问题有一个解决办法;您需要使用javascript来处理它

这里提到了解决方案:

2012年5月20日编辑;看了评论之后

//将此JavaScript代码放在ScriptManager1之后很重要
var xPos,yPos;
var prm=Sys.WebForms.PageRequestManager.getInstance();
函数BeginRequestHandler(发送方,参数){
如果($get(“”)!=null){
//在部分回发之前获取滚动条的X和Y位置
xPos=$get(“”).scrollLeft;
yPos=$get(“”).scrollTop;
}
}
函数EndRequestHandler(发送方,参数){
如果($get(“”)!=null){
//将X和Y位置设置回滚动条
//部分回发后
$get(“”).scrollLeft=xPos;
$get(“”).scrollTop=yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
下面是代码快照:-


将MaintainScrollPositionPostBack=“true”添加到您的页面指令中。

几天来,我一直在使用MaintainScrollPositionPostBack的典型替代方法以及使用BeginRequestHandler和EndRequestHandler的JavaScript解决方案来寻找这个问题的答案,在我的例子中,我使用MasterPage

没有任何效果,但是我使用jQuery和BeginRequestHandler以及EndRequestHandler提出了一个相当简单的解决方案,使用相同的@waqas raja算法:

<script type="text/javascript">

    var scrollPosition = 0;

    $(document).ready(function () {

        $(window).scroll(function (event) {
            scrollPosition = $(window).scrollTop();
        });

    });

</script>

<script type="text/javascript">

    // It is important to place this JavaScript code after ScriptManager1
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args) {
        console.log('BeginRequest');
    }

    function EndRequestHandler(sender, args) {
        $(window).scrollTop(scrollPosition);
    }

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);

</script>

变量位置=0;
$(文档).ready(函数(){
$(窗口)。滚动(功能(事件){
scrollPosition=$(窗口).scrollTop();
});
});
//将此JavaScript代码放在ScriptManager1之后很重要
var xPos,yPos;
var prm=Sys.WebForms.PageRequestManager.getInstance();
函数BeginRequestHandler(发送方,参数){
console.log('BeginRequest');
}
函数EndRequestHandler(发送方,参数){
$(窗口).scrollTop(滚动位置);
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
这样做的目的是在用户每次移动卷轴时,在全局变量中捕获卷轴的位置,这样就可以知道最后一个位置,并且在进行回发时,输入EndRequestHandler事件,并使用用户标记的最后一个位置进行更新


这在Firefox和Google Chrome中对我很有效:)

非常好!!很有魅力!!图片中的代码工作得很好!如果您想复制和粘贴,这里有一个链接,我正在使用计时器更新网格视图,在这种情况下它不起作用js never executeIt在jQuery更改
$get(
for
$(
并使用
scrollLeft()时工作得很好
而不仅仅是
scrollLeft
只有在更改面板中绑定到LinkButton元素并导致回发的数据后,它才对我有效。在我的情况下,我有一个中继器,通过将保存在标签中的单独html位与LinkButton中的一个连接起来,构建日历。如果数据绑定到LinkButton在以标签开始时,滚动位置将跳转到开始位置。在将首字母置于上一个标签后,滚动位置将按此处所述进行维护。希望这可能对某些人有用。这不会有帮助,因为它只维护页面的滚动位置,而不维护div或panel。请检查此解决方案,它帮助了我:
<script type="text/javascript">

    var scrollPosition = 0;

    $(document).ready(function () {

        $(window).scroll(function (event) {
            scrollPosition = $(window).scrollTop();
        });

    });

</script>

<script type="text/javascript">

    // It is important to place this JavaScript code after ScriptManager1
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args) {
        console.log('BeginRequest');
    }

    function EndRequestHandler(sender, args) {
        $(window).scrollTop(scrollPosition);
    }

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);

</script>