我在UpdatePanel中有一个非数据绑定Dropdownlist:
<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。当我关闭“项目数”时,事件处理程序按预期触发,执行代码。但当我切换回“容量”时,处理程序不会触发。回发正在发生,但我希望它专门命中两个列表项上的事件处理程序。
你可以看到我在那里有一个注释掉的“0值”ListItem。当我取消注释时,“容量”和“项目数”都将按预期命中事件处理程序。
问题在于,当页面加载时,它正在加载与“容量”下拉列表相关的数据,因此我希望显示“容量”ListItem,但是能够在选中时触发事件处理程序。
我错过了一些明显的东西吗?
E:我尝试为DDL_Prerender事件添加一个处理程序,将SelectedIndex设置为200或者明显不在列表中的东西,希望它取消选择“容量”,但这也不起作用。
这是预渲染代码:
protected void CapNumProjectsDDL_PreRender(object sender, EventArgs e)
{
CapNumProjectsDDL.SelectedIndex = 200;
}
这并没有改变它的工作方式。
答案 0 :(得分:1)
即使您在下拉框中选择了已选择的项目,您似乎也希望下拉元素提高更改。我相信这不会起作用,问题的原因不在于服务器端的asp.net下拉列表控件,而是HTML select元素如何处理呈现的DropDownList控件。
问题是如果用户选择与显示丢弃框之前相同的项目,HTML select元素不会触发更改事件(因为从控制状态的角度来看 - 它没有被更改)。
所以,我相信你想要的行为可以实现,但你不应该使用HTML select控件而不是它实现自定义解决方案。