У меня есть gridview, который помещается в панель ASP.NET. как панель, так и Gridview находятся в UpdatePanel. есть столбец в gridview, который вызывает частичные PostBacks. Я хочу сохранить позицию прокрутки панели для этих обратных передач. Там в любом случае? С уважением.
Сохранение позиции прокрутки панели на частичной обратной передаче ASP.NET
Ответ 1
Нет встроенного средства для его решения в asp.net
Однако для этой проблемы существует обходной путь; Вам нужно обработать его с помощью javascript.
Решение упоминается здесь: Поддержание позиции прокрутки внутри UpdatePanel после частичного PostBack
Отредактировано 20 мая 2012 года; после просмотра комментариев
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release" />
<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) {
if ($get('<%=Panel1.ClientID%>') != null) {
// Get X and Y positions of scrollbar before the partial postback
xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
yPos = $get('<%=Panel1.ClientID%>').scrollTop;
}
}
function EndRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
// Set X and Y positions back to the scrollbar
// after partial postback
$get('<%=Panel1.ClientID%>').scrollLeft = xPos;
$get('<%=Panel1.ClientID%>').scrollTop = yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" Height="300">
<%-- Some stuff which would cause a partial postback goes here --%>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
Ниже приведен снимок кода: -
Ответ 2
Добавить MaintainScrollPositionOnPostback = "true" в директиву вашей страницы.
Ответ 3
Я искал ответ на эту проблему в течение нескольких дней, используя типичную альтернативу 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 :)