0

我在 UpdatePanel 中有一个非数据绑定下拉列表:

<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-value”ListItem。当我取消注释时,“容量”和“项目数量”都将按预期命中事件处理程序。

问题是当页面加载时,它正在加载与“容量”下拉列表相关的数据,所以我希望显示“容量”ListItem,但能够在选择时触发事件处理程序。

我在这里遗漏了一些明显的东西吗?

E:我尝试为 DDL_Prerender 事件添加一个处理程序,将 SelectedIndex 设置为喜欢 200 或明显不在列表中的东西,希望它会取消选择“容量”,但这也不起作用。

这是预渲染代码:

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

这并没有改变它的工作方式。

4

1 回答 1

1

即使您在下拉框中选择了已选择的项目,您似乎也希望下拉元素引发更改。我相信这行不通,问题的原因不在于服务器端的 asp.net 下拉列表控件,而在于 HTML 选择元素如何工作到哪个 DropDownList 控件呈现。

问题是,如果用户选择与显示下拉框之前相同的项目,则 HTML 选择元素不会触发更改事件(因为从控制状态的角度来看 - 它没有更改)。

所以,我相信你想要的行为可以实现,但你不应该使用 HTML 选择控件,而不是实现自定义解决方案。

于 2012-11-08T21:30:47.713 回答