2012-11-08 120 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选择控件而是它实现自定义解决方案。

相关问题