在 ASP.Net 页面上,我有一个列表框。当其中的选定项目发生变化时,下拉列表会根据项目被激活或停用,并且再次根据列表框项目选择下拉列表中的另一个项目。
我无法在 javascript 中执行列表框的 onSelectedItemChanged 操作,因为我需要为该操作查询 2 个不同的数据库。
我遇到的问题是,每当从列表框中的选择更改事件中对站点进行部分回发时,选定的列表框项目总是滚动到列表框的顶部(在 IE 中)或底部(在 chrome 中)。这对用户来说是非常烦人的。
以下是用户选择项目之前列表框的外观:
现在用户选择了一个项目,selectionchanged 的事件处理程序被调用,用数据填充下面的下拉列表,并发生部分回发。对于此示例,用户单击列表框中的第 4 个“Klärschlamm”项。回发后,列表框如下所示:
突然,选定的项目位于列表框的顶部,而不是它被选中时的底部。
回发后如何保持列表框的滚动位置?我尝试了很多我在网上找到的“解决方案”,将列表框和下拉列表包装在更新面板中,使用 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,我只会对列表框进行数据绑定。