ASP.Net列表框:部分回发后维护列表框滚动位置(不是站点滚动位置!)

时间:2013-07-18 13:25:02

标签: c# javascript asp.net listbox postback

在ASP.Net页面上,我有一个列表框。当其中的所选项目发生更改时,将根据项目激活或取消激活下拉列表,并再次根据列表框项目选择下拉列表中的其他项目。

我无法在javascript中执行列表框的onSelectedItemChanged操作,因为我需要查询2个不同的数据库以进行操作。

我遇到的问题是,只要列表框中的选择更改事件在网站上有部分回发,所选列表框项就会始终滚动到列表框的顶部(在IE中)或底部(在镶边中)。这对用户来说非常恼火。

以下是用户选择项目enter image description here之前列表框的显示方式:

现在,用户选择一个项目,selectchanged的eventhandler被调用,用下面的数据填充下拉列表,并发生部分回发。对于此示例,用户单击列表框中的“Klärschlamm”项目,即第4个项目。回发后,这就是列表框的样子:

enter image description here

突然,所选项目位于列表框的顶部,而不是选择它时的底部。

如何在回发后维护列表框的滚动位置?我尝试了很多我在网上发现的“解决方案”,包括列表框和更新面板中的下拉列表,使用javascript Begin-和EndRequestHandlers等。我找到的所有解决方案都没有改变任何内容,唉。

这是我使用的XAML:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" 
AutoEventWireup="true" CodeBehind="AbfallEdit.aspx.cs" %>

<asp:UpdatePanel runat="server" UpdateMode="Always" ChildrenAsTriggers="True">
  <ContentTemplate>
    <asp:ListBox id="list" clientidmode="Static" runat="server" AutoPostBack="True" 
    OnSelectedIndexChanged="updateKontamination" />
  </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel runat="server">
  <ContentTemplate>
    <asp:DropDownList ID="drop" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>

SelectedIndexChanged事件处理程序只执行一些数据库查询,然后激活下拉列表并设置相应的索引。它对列表框本身没有任何作用。 如果它不是PostBack,我只对数据库进行数据绑定。

1 个答案:

答案 0 :(得分:0)

这篇文章很老了,但万一其他人有同样的问题......

将标记更改为

    <asp:UpdatePanel id="upList" runat="server" UpdateMode="Conditional"> 
      <Triggers>
        <asp:AsyncPostBackTrigger ControlID="otherControlToUpdateList" EventName="<EventName>" />
      </Triggers>      
      <ContentTemplate>
         <asp:ListBox id="list" clientidmode="Static" runat="server" AutoPostBack="True" 
            OnSelectedIndexChanged="updateKontamination" />
      </ContentTemplate>
    </asp:UpdatePanel>

    <asp:UpdatePanel id="upDrop" runat="server" UpdateMode="Conditional">
      <Triggers>
        <asp:AsyncPostBackTrigger ControlID="list" EventName="SelectedIndexChanged" />
      </Triggers>
      <ContentTemplate>
        <asp:DropDownList ID="drop" runat="server" />
      </ContentTemplate>
    </asp:UpdatePanel>

这应该保持&#34; upList&#34;从解雇和重建&#34;列表&#34;选择改变。