Я искал ответ на эту проблему в течение нескольких дней, используя типичную альтернативу MaintainScrollPositionOnPostback и решения JavaScript, использующие BeginRequestHandler и EndRequestHandler, где в моем случае я использую 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>
Идея состоит в том, чтобы фиксировать положение прокрутки в глобальной переменной каждый раз, когда пользователь перемещает прокрутку, таким образом, известно, какая позиция была последней, и при выполнении обратной передачи событие EndRequestHandler вводится и обновляется с помощью последняя позиция, которую пользователь отметил
Это сработало для меня в Firefox и Google Chrome:)