列表框在autopostback上滚动到顶部

时间:2011-09-01 18:17:35

标签: .net asp.net listbox autopostback

为什么在启动autopostback时,asp.net列表框总是在选择项目时滚动到顶部?我怎样才能防止这种情况发生?

4 个答案:

答案 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>