4

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

4

4 回答 4

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>
于 2012-10-25T13:33:16.453 回答
3

我遇到了同样的问题,我想出了一种使用更新面板的方法。我相信这是由于列表框在回发时更新,因此更新面板可以帮助我们确保它不会更新。确保列表框位于条件更新面板内,其中子项作为触发器设置为“false”:

 <asp:UpdatePanel runat="server" ID="updtpnlSearchResults" UpdateMode="Conditional" ChildrenAsTriggers="false">

现在,将列表框选择更改时需要更改的内容放在它自己的更新面板中。这样列表框就不会被刷新。

于 2013-09-18T20:44:43.657 回答
0

你需要这个页面指令:

<%@ Page MaintainScrollPositionOnPostback="true" ... %>
于 2011-09-01T18:29:58.563 回答
-3

你有几个选择。您可以在页面指令中将 MaintainScrollPositionOnPostBack 设置为 true,也可以将列表框放在更新面板中并使用 AJAX 来保持滚动位置。

页面指​​令选项:

<pages maintainScrollPositionOnPostBack="true" />

更新面板选项:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:ListBox ID="ListBox1" runat="server" ...>
    </ContentTemplate>
</asp:UpdatePanel>
于 2011-09-01T18:39:08.527 回答