0

説明するのに苦労している問題に遭遇しました。

既存のソリューションの改善に取り組んでいますが、ドロップダウンで予期していなかった動作が見られます。非同期に設定されていても、常にページ全体のポストバックを行っているようです。それらはリピーターの内部にあります。

これが更新パネルのリピーターです。

 <asp:UpdatePanel runat="server" ID="upnlPartSelector" ChildrenAsTriggers="true" UpdateMode="Always" Visible="false">
<ContentTemplate>
    <div class="product-page">
        <div class="row">

            <asp:Repeater runat="server" ID="rptFilterCategories" OnItemDataBound="RptCategories_ItemDataBound" OnItemCreated="rptFilterCategories_ItemCreated">
                <HeaderTemplate>
                    <div class="filter-selection">
                </HeaderTemplate>
                <ItemTemplate>
                    <div class="title">
                        <%# Eval("CategoryName") %>
                    </div>
                    <div class="select">
                        <asp:DropDownList CssClass="form-control" runat="server" ID="ddlFilterItems" AutoPostBack="true" DataTextField="Display" DataValueField="Value" OnSelectedIndexChanged="ddlFilterItems_SelectedIndexChanged"/>
                    </div>
                </ItemTemplate>
                <FooterTemplate>
                    </div>
                </FooterTemplate>
            </asp:Repeater>
    </div>
</ContentTemplate>

リピーター OnItemCreated メソッドの非同期トリガーとしてドロップダウンを登録しています。

 protected void rptFilterCategories_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var control = e.Item.FindControl("ddlFilterItems");
            ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(control);
        }
    }

それでも、パネルを更新するだけでなく、ページ全体のポストバックを行っています。更新パネルのトリガーとしてリピーターを設定する必要がありますか? または、非同期ポストバック コントロールが接続する更新パネルを具体的に教えてください。

4

1 に答える 1