Как я могу вернуться к той же позиции страницы на postback
. Это всегда кажется, чтобы добраться до верхней части страницы.
Я пытался использовать maintainScrollPositionOnPostBack = "true"
Но это не работает.
Как я могу вернуться к той же позиции страницы на postback
. Это всегда кажется, чтобы добраться до верхней части страницы.
Я пытался использовать maintainScrollPositionOnPostBack = "true"
Но это не работает.
Недавно я искал это. Нашел с загрузкой Javascript, который будет вставлен до тех пор, пока не найду следующее:
В верхней части вашего .aspx-кода введите следующее:
MaintainScrollPositionOnPostback="true"
поэтому самое первое предложение в вашем .aspx запускает
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Это отлично работает для меня без необходимости добавлять какой-либо другой код для сохранения позиций прокрутки с помощью обновляемых панелей
Есть несколько способов, которые я использовал для установки поддержкиScrollPositionOnPostBack. Вы пробовали больше одного? Можете ли вы описать, что запускает обратную передачу и какие браузеры вы протестировали? Вы используете мастер-страницу?
Page.MaintainScrollPositionOnPostBack = true;
в код позади загрузки страницы.<%@ Page MaintainScrollPositionOnPostback="true" %>
<pages maintainScrollPositionOnPostBack="true" />
Вы можете установить .Focus() на определенный серверный элемент управления, когда ваша страница вернется назад.
Вы используете Google Chrome для тестирования? У меня была такая же проблема, но я начал тестировать в IE и Firefox, и он работал. Я не думаю, что Chrome поддерживает это свойство. Это может быть проблема .NET Framework 3.5. Вероятно, это исправлено в .NET 4.0
<script type="text/javascript">
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
yPos = $get('<%=Panel1.ClientID%>').scrollTop;
}
}
function EndRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
$get('<%=Panel1.ClientID%>').scrollLeft = xPos;
$get('<%=Panel1.ClientID%>').scrollTop = yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
добавьте приведенный выше код в тег ScriptManager
и добавьте MaintainScrollPositionOnPostback="true"
в объявлении страницы.
Если у вас есть определенный якорь, который вы хотите переместить, вы можете сделать что-то вроде описанного здесь. В противном случае вам придется использовать javascript и узнать, насколько вы находитесь сверху, сохраните его в скрытом поле или файле cookie и reset представление после загрузки страницы.
Хотя ответ bbbwex верен, мне потребовалось некоторое время, чтобы понять, что мне нужно разместить MaintainScrollPositionOnPostback = "true" на обоих
Верх страницы ASPX.
В IsPostBack
Он работает после того, как я выполняю оба условия.
Примечание. Если у вас задан элемент управления по умолчанию, он будет прокручиваться до этого элемента управления при повторной публикации, даже если Page MaintainScrollPositionOnPostback = "true"
Из этого вопроса: Сохранение позиции прокрутки панели при частичной обратной передаче ASP.NET
Я искал ответ на эту проблему в течение нескольких дней, используя типичную альтернативу 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>
Идея состоит в том, чтобы фиксировать положение Scroll в глобальной переменной каждый раз, когда пользователь перемещает Scroll, таким образом, известно, какая позиция была последней, и при выполнении обратной передачи событие EndRequestHandler вводится и обновляется с последней позицией, что пользователь отметил
Это работало для меня в Firefox и Google Chrome :)
Убедитесь, что вы не устанавливаете кнопку по умолчанию в <form id="form1" runat="server" defaultbutton="YourDefaultButton">
. Удалите defaultbutton="YourDefaultButton"
и MaintainScrollPositionOnPostback="true"
будет работать.