2012-11-08 158 views
0

我有一個非數據綁定DROPDOWNLIST一個UpdatePanel內:ASP:DROPDOWNLIST OnSelectedIndexChanged事件不觸發

<asp:UpdatePanel runat="server" ID="FiltersUpdPnl"> 
    <ContentTemplate> 
     <div class="filters"> 
      <asp:Button runat="server" ID="ExportBtn" Text="Export Map to Image" /> 
      <br /> 
      Show: 
      <asp:DropDownList runat="server" ID="CapNumProjectsDDL" AutoPostBack="true" OnSelectedIndexChanged="ApplyFilters" OnPreRender="CapNumProjectsDDL_PreRender"> 
       <%--<asp:ListItem Value="0" Text="" Selected="True"></asp:ListItem>--%> 
       <asp:ListItem Value="1" Text="Capacity"></asp:ListItem> 
       <asp:ListItem Value="2" Text="Number of Projects"></asp:ListItem> 
      </asp:DropDownList> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

事件處理程序是不是非常重要的,它只是做的東西:

protected void ApplyFilters(object sender, EventArgs e) 
{ 
    //Do Stuff relating to the selected Value 
} 

當頁面加載時,默認情況下選擇「容量」,因爲它是第一個ListItem。當我關閉「項目數量」時,事件處理程序按預期觸發,執行代碼。但是當我切換回「容量」時,處理程序不會觸發。 Postback正在發生,但我希望它能夠特別擊中兩個列表項上的事件處理程序。

你可以看到我有一個註釋掉的「0值」ListItem。當我取消註釋時,「容量」和「項目數」將按預期擊中事件處理程序。

問題是,當頁面加載時,它將加載與「容量」下拉相關的數據,所以我希望顯示「容量」ListItem,但能夠在選定時觸發事件處理程序。

我在這裏錯過了一些明顯的東西嗎? E:我試着爲DDL_Prerender事件添加一個處理程序,將SelectedIndex設置爲200或者明顯不在列表中,希望它會取消選擇「容量」,但這也不起作用。

這是預渲染代碼:

protected void CapNumProjectsDDL_PreRender(object sender, EventArgs e) 
{ 
    CapNumProjectsDDL.SelectedIndex = 200; 
} 

這並沒有改變它的工作方式。

+0

當我拿出**的OnPreRender =「CapNumProjectsDDL_PreRender」 **(沒有代碼),它的工作原理。你可以發佈** CapNumProjectsDDL_PreRender **的代碼嗎? – SBurris

+0

這個問題似乎是,你不提供代碼。我想簡單地使用您的標記,一切工作(當你從容量和項目數,反之亦然切換ApplyFilters事件處理函數)。 –

+0

當然,我會更新我的帖子。 – RockiesMagicNumber

回答

1

即使您在下拉框中選擇了已選項目,您似乎也希望該下拉元素會引起更改。我認爲,這是行不通的,問題的原因是不是在服務器端asp.net下拉列表控制,但在HTML選擇元素是如何工作的,其下拉列表來控制渲染。

問題是,如果用戶選擇顯示下拉框之前的相同項目(因爲從控制狀態的角度來看 - 它沒有更改),HTML select元素不會觸發更改事件。

所以,我相信你想要的行爲是可以實現的,但是你不應該使用HTML選擇控件而是它實現自定義解決方案。

相關問題