ASP.Net ページにリストボックスがあります。選択されたアイテムが変更されると、アイテムに応じてドロップダウンリストがアクティブまたは非アクティブになり、リストボックスのアイテムに応じて、ドロップダウンリストの別のアイテムが選択されます。
アクションのために2つの異なるデータベースを照会する必要があるため、JavaScriptでリストボックスのonSelectedItemChangedアクションを実行できません。
私が抱えている問題は、リストボックスの選択変更イベントからサイトに部分的なポストバックがあるたびに、選択されたリストボックス項目が常にリストボックスの上部 (IE の場合) または下部 (クロムの場合) にスクロールすることです。これは、ユーザーにとって非常に苛立たしいものです。
ユーザーが項目を選択する前のリストボックスは次のようになります。
ここで、ユーザーが項目を選択すると、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 でない場合にのみ、リストボックスをデータバインドします。