0

我有一个带有 DropDownList 的 UpdatePanel。在 UpdatePanel 中,我向 PlaceHolder 添加了一些自定义控件,其中有一个带有OnClick="AddItemToCart". 如果我刷新我的页面并按下该AddItemToCart事件被调用的按钮,如果我将 DropDownList 更改为与页面一起加载的默认值以外的其他值,则该AddItemToCart事件不会触发。我能够将 DropDownList 更改回默认值,它将允许事件再次触发。

我认为这与事件注册有关,但我不确定在哪里看。我已经尝试以编程方式将 OnClick 值分配给每个回发的按钮,但这似乎不起作用。我不明白出了什么问题,因为回发正在工作,但是我的事件没有被触发。

总而言之,如果下拉值与它在页面加载时加载的值不同,我的 OnClick 在 ajax 回发后不会触发。

这是我的代码(虽然我不确定它会有所帮助):

<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 回答