我有一个带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()
答案 0 :(得分:0)
我设法找到了这个问题的原因。
在ApplyFilters
我正在重新加载控件并将它们添加到phContentListCnt
但我先清理占位符。这意味着在Page_Load中注册的事件也被清除,并且此时在页面生命周期的后期注册新事件。在本文中,我使用Request.Form[]
在页面加载中检查我的过滤器,因此我可以在页面加载中加载动态控件。