0

UpdatePanel内にデータバインドされていないドロップダウンリストがあります。

<asp:UpdatePanel runat="server" ID="FiltersUpdPnl">
    <ContentTemplate>
        <div class="filters">
            <asp:Button runat="server" ID="ExportBtn" Text="Export Map to Image" />
            <br />
            Show: 
            <asp:DropDownList runat="server" ID="CapNumProjectsDDL" AutoPostBack="true" OnSelectedIndexChanged="ApplyFilters" OnPreRender="CapNumProjectsDDL_PreRender">
                <%--<asp:ListItem Value="0" Text="" Selected="True"></asp:ListItem>--%>
                <asp:ListItem Value="1" Text="Capacity"></asp:ListItem>
                <asp:ListItem Value="2" Text="Number of Projects"></asp:ListItem>
            </asp:DropDownList>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

イベントハンドラーはそれほど重要ではありません、それはただ何かをします:

protected void ApplyFilters(object sender, EventArgs e)
{
    //Do Stuff relating to the selected Value
}

ページが読み込まれると、最初のListItemであるため、デフォルトで「Capacity」が選択されます。「プロジェクト数」に切り替えると、イベントハンドラーが期待どおりに起動し、コードが実行されます。しかし、「Capacity」に戻すと、ハンドラーは起動しません。ポストバックが発生していますが、両方のリストアイテムのイベントハンドラーを具体的にヒットさせたいと思います。

コメントアウトされた「0値」のListItemがそこにあることがわかります。コメントを外すと、「Capacity」と「NumberofProjects」の両方が期待どおりにイベントハンドラーにヒットします。

問題は、ページが読み込まれるときに、[容量]ドロップダウンに関連するデータが読み込まれるため、[容量] ListItemを表示したいのですが、選択するとイベントハンドラーを起動できるようにすることです。

ここで明らかな何かが欠けていますか?

E:DDL_Prerenderイベントのハンドラーを追加し、SelectedIndexを200などに設定して、「Capacity」の選択を解除することを期待しましたが、それも機能しませんでした。

これは事前レンダリングコードです:

protected void CapNumProjectsDDL_PreRender(object sender, EventArgs e)
{
    CapNumProjectsDDL.SelectedIndex = 200;
}

これはそれが機能する方法を変えませんでした。

4

1 に答える 1

1

ドロップダウンボックスで既に選択されているアイテムを選択しても、ドロップダウン要素が変化することを望んでいるようです。これは機能しないと思います。問題の原因は、サーバー側の asp.net ドロップダウンリスト コントロールではなく、DropDownList コントロールがレンダリングされる HTML select 要素がどのように機能するかにあります。

問題は、ユーザーがドロップ ボックスが表示される前と同じアイテムを選択した場合、HTML select 要素が change イベントを発生させないことです (コントロールの状態の観点からは変更されていないため)。

したがって、必要な動作を実装できると思いますが、HTML 選択コントロールを使用せず、代わりにカスタム ソリューションを実装する必要があります。

于 2012-11-08T21:30:47.713 に答える