4

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 でない場合にのみ、リストボックスをデータバインドします。

4

1 に答える 1

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>

これにより、選択の変更時に「upList」が起動して「リスト」が再構築されないようにする必要があります。

于 2015-01-14T15:56:01.763 に答える