0

DropDownList を持つ UpdatePanel があります。UpdatePanel 内で、いくつかのカスタム コントロールを PlaceHolder に追加していますOnClick="AddItemToCart"。ページを更新してボタンを押すと、AddItemToCartイベントが呼び出されます。DropDownList をページに読み込まれたデフォルト値以外に変更すると、AddItemToCartイベントは発生しません。DropDownList をデフォルト値に戻すことができ、イベントが再びトリガーされるようになります。

これはイベント登録に関するものだと思いますが、どこを見ればよいかわかりません。OnClick 値を各ポストバックのボタンにプログラムで割り当てようとしましたが、うまくいかないようです。ポストバックが機能しているため、何が問題なのかわかりませんが、イベントはトリガーされません。

要約すると、ドロップダウン値がページの読み込み時に読み込まれた値と異なる場合、ajax ポストバック後に OnClick が起動しません。

これは私のコードです(役立つかどうかはわかりませんが):

<asp:UpdatePanel ID="updSIListCnt" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:DropDownList id="ddlSort" runat="server" OnSelectedIndexChanged="ApplyFilters" AutoPostBack="True" Width="23%">
            <asp:ListItem Value="0">Sort By Relevancy</asp:listitem>
            <asp:ListItem Value="1">Sort By Product Code</asp:listitem>
            <asp:ListItem Value="2">Sort By Product Description</asp:listitem>
            <asp:ListItem Value="3">Sort By Price - Lowest</asp:listitem>
            <asp:ListItem Value="4">Sort By Price - Highest</asp:listitem>
        </asp:DropDownList>

        <asp:PlaceHolder id="phContentListCnt" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="upSIList" runat="server" AssociatedUpdatePanelID="updSIListCnt">
    <ProgressTemplate>
        <asp:Image id="imgLoading" runat="server" ImageUrl="~/Images/loading.gif" CssClass="loader" />
    </ProgressTemplate>
</asp:UpdateProgress>

phContentListCnt次のいくつかのインスタンスが含まれています。

 <asp:ImageButton ID="btnAddToBasket" runat="server" ImageUrl="~/Images/Buttons/add_to_basket.jpg" OnClick="AddItemToCart" CausesValidation="false" />

ApplyFiltersいくつかの SQL と呼び出しを実行しますUpdatePanel.Refresh()

4

1 に答える 1

0

この問題の原因を見つけることができました。

ApplyFiltersコントロールをリロードして追加していましたphContentListCntが、最初にプレースホルダーをクリアしていました。これは、Page_Load に登録されたイベントもクリアされたことを意味し、この時点でページ ライフ サイクルの後半に新しいイベントを登録する必要がありました。このメモでは、ページの読み込みでフィルターをチェックしてRequest.Form[]いるので、ページの読み込みで動的コントロールを読み込むことができます。

于 2012-12-19T12:29:35.637 に答える