2010-10-16 3 views
1

я использую ASP.NET 4.0 IIS 7.5 Microsoft Visual Studio 2010Как сохранить всю позицию страницы прокрутки после асинхронного постбэк

то, что я хочу сохранить всю страницу (браузер) прокрутить позицию (не ДИВ или панели), когда асинхронный постбэк произошел (панель обновления)

, как я могу это сделать

на самом деле я имел функцию, которая может держать Диво положение полосы прокрутки после обратной передачи, как это

 <script type="text/javascript"> 
     var xPos, yPos; 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     prm.add_beginRequest(BeginRequestHandler); 
     prm.add_endRequest(EndRequestHandler); 
     function BeginRequestHandler(sender, args) { 
      xPos = document.getElementById('Main').scrollLeft; 
      yPos = document.getElementById('Main').scrollTop; 
     } 
     function EndRequestHandler(sender, args) { 
      document.getElementById('Main').scrollLeft = xPos; 
      document.getElementById('Main').scrollTop = yPos; 
     } 
    </script> 

бушель я не смог найти браузер прокрутки бар идентификатор, чтобы получить свои значения, чтобы получить с document.getElementById

спасибо за ответы

ответ

1

asp.net имеет @page директивы свойство MaintainScrollPositionOnPostBack

надеюсь, что это поможет

+0

это делает не работает для асинхронных postbacks – MonsterMMORPG

+0

нормально, я думаю, что это правильный вариант: http://forums.asp.net/t/1300961.aspx, а также http://stackoverflow.com/questions/799852/page-moves-to -top-on-postback-of-control-in-updatepanel –

+0

Благодарим за ответ, но не решили проблему для firefox :( – MonsterMMORPG

1

Я нашел его здесь: http://forums.asp.net/t/1300961.aspx

просто добавить его сразу после менеджера сценариев. это работает для меня во всех браузерах

<script type="text/javascript"> 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_beginRequest(beginRequest); 
    function beginRequest() 
    { 
     prm._scrollPosition = null; 
    } 
</script> 
+0

Только решение Работало для меня Спасибо –

0

Вы можете сделать это клиент так:

$(document).ready(function() { 
    $(window).on('beforeunload', function() { 
     document.cookie = "keepscroll=" + $(window).scrollTop(); 
    }); 
    var cs = document.cookie ? document.cookie.split(';') : []; 
    var i = 0, cslen = cs.length; 
    for (; i < cs.length; i++) { 
     var c = cs[i].split('='); 
     if (c[0].trim() == "keepscroll") { 
      $(window).scrollTop(parseInt(c[1])); 
      break; 
     } 
    } 
}); 

Если вы не друг JQuery, то вы могли бы попробовать что-то вроде:

window.onbeforeunload = function() { 
    document.cookie = "keepscroll=" + document.body.scrollTop; 
}; 
var keepscroll = window.setTimeout(function() { 
    var cs = document.cookie ? document.cookie.split(';') : []; 
    var i = 0, cslen = cs.length; 
    for (; i < cs.length; i++) { 
     var c = cs[i].split('='); 
     if (c[0].trim() == "keepscroll") { 
      window.scrollTo(0, parseInt(c[1])); 
      break; 
     } 
    } 
    window.clearTimeout(keepscroll); 
    keepscroll = null; 
}, 100); 
Смежные вопросы