2012-12-18 91 views
0

我有一個DropDownList的UpdatePanel。在UpdatePanel中,我將一些自定義控件添加到一個PlaceHolder,該按鈕的按鈕位於OnClick="AddItemToCart"。如果我刷新頁面並按下按鈕,則調用AddItemToCart事件,如果將DropDownList更改爲頁面加載的默認值以外的值,則AddItemToCart事件不會觸發。我可以將DropDownList更改回默認值,並允許事件再次觸發。按鈕onClick事件不會觸發後AJAX回發,但回發仍然發生

我認爲這是事件註冊的事情,但我不確定在哪裏看。我試圖通過編程方式將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

我設法找到了這個問題的原因。

ApplyFilters我重新加載控件並將它們添加到phContentListCnt,但我首先清除了佔位符。這意味着在Page_Load中註冊的事件也被清除了,並且在頁面生命週期的最後階段註冊新事件。在這個筆記上,我使用Request.Form[]來檢查我的頁面加載過濾器,這樣我就可以在頁面加載中加載我的動態控件。