按钮onClick事件在AJAX回发后没有触发,但仍然发生回发

时间:2012-12-18 15:35:50

标签: asp.net ajax events postback

我有一个带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()

1 个答案:

答案 0 :(得分:0)

我设法找到了这个问题的原因。

ApplyFilters我正在重新加载控件并将它们添加到phContentListCnt但我先清理占位符。这意味着在Page_Load中注册的事件也被清除,并且此时在页面生命周期的后期注册新事件。在本文中,我使用Request.Form[]在页面加载中检查我的过滤器,因此我可以在页面加载中加载动态控件。

相关问题