为什么在启动autopostback时,asp.net列表框总是在选择项目时滚动到顶部?我怎样才能防止这种情况发生?
答案 0 :(得分:4)
我在javascript中添加了以下jquery来解决问题。我不记得我在哪里找到了解决方案,但在这里。只需添加目标控件的位置 - $ 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>
答案 1 :(得分:1)
我有同样的问题,我想出了一种方法来使用更新面板。我相信这是由于列表框在回发时更新,因此更新面板可以帮助我们确保它不会更新。确保列表框位于条件更新面板中,并将子项作为触发器设置为“false”:
<asp:UpdatePanel runat="server" ID="updtpnlSearchResults" UpdateMode="Conditional" ChildrenAsTriggers="false">
现在,当列表框选择在其自己的更新面板内更改时,需要更改任何需要更改的内容。这样,列表框就不会刷新。
答案 2 :(得分:0)
您需要此页面指令:
<%@ Page MaintainScrollPositionOnPostback="true" ... %>
答案 3 :(得分:-2)
你有几个选择。您可以在页面指令中将MaintainScrollPositionOnPostBack设置为true,也可以将列表框放在更新面板中并使用AJAX来保持滚动位置。
页面指令选项:
<pages maintainScrollPositionOnPostBack="true" />
更新面板选项:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server" ...>
</ContentTemplate>
</asp:UpdatePanel>