Прокрутка списка вверх на автоответчик
Почему список asp.net всегда прокручивается вверх при выборе элемента, когда автоответчик включен? Как я могу предотвратить это?
4 ответа
Я добавил следующий jquery в javascript, чтобы исправить проблему. Я не могу вспомнить, где я нашел решение, но вот оно. Просто добавьте местоположение вашего целевого элемента управления - $get('YourDiv_YourPanel').
<script type="text/javascript">
//Maintain scroll position in given element or control
var xInputPanel, yInputPanel;
var xProductPanel, yProductPanel;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
yInputPanel = $get('MainContent_InputPanel').scrollTop;
yProductPanel = $get('MainContent_ProductPanel').scrollTop;
}
function EndRequestHandler(sender, args) {
$get('MainContent_InputPanel').scrollTop = yInputPanel;
$get('MainContent_ProductPanel').scrollTop = yProductPanel;
}
</script>
У меня была такая же проблема, и я нашел способ сделать это с помощью панелей обновления. Я считаю, что это происходит из-за того, что список обновляется при обратной передаче, поэтому панели обновления могут помочь нам убедиться, что он не обновляется. Убедитесь, что список находится внутри панели условного обновления с дочерними элементами в качестве триггеров, установленных на "ложь":
<asp:UpdatePanel runat="server" ID="updtpnlSearchResults" UpdateMode="Conditional" ChildrenAsTriggers="false">
Теперь поместите все, что нужно изменить, когда выбор списка изменится на собственной панели обновления. Таким образом, список не обновляется.
Вам нужна эта директива страницы:
<%@ Page MaintainScrollPositionOnPostback="true" ... %>
У вас есть несколько вариантов. Вы можете либо установить для MaintainScrollPositionOnPostBack значение true в директиве страницы, либо поместить список на панель обновлений и использовать AJAX для поддержания позиции прокрутки.
Опция директивы страницы:
<pages maintainScrollPositionOnPostBack="true" />
Опция обновления панели:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server" ...>
</ContentTemplate>
</asp:UpdatePanel>