更改下拉列表选择会导致完全回发。 (它比听起来更有趣)

时间:2010-05-06 13:20:42

标签: c# asp.net drop-down-menu updatepanel

这是情景。

我有一个带有TextBox的搜索页面,允许有人输入搜索词并按回车键。 (它触发TextChanged)。我有一个DropDownList,它指定将要执行的搜索类型。它在标记中定义如下:

                    <asp:DropDownList ID="lstSearchType" runat="server" AutoPostBack="false">
                    <asp:ListItem Value="0">Last, First</asp:ListItem>
                    <asp:ListItem Value="1">Last</asp:ListItem>
                    <asp:ListItem Value="2">First</asp:ListItem>
                    <asp:ListItem Value="3">Liberty ID</asp:ListItem>
                    <asp:ListItem Value="4">E-mail</asp:ListItem>
                    <asp:ListItem Value="5">Telephone</asp:ListItem>
                    <asp:ListItem Value="6">Birthday (exact m/d/yyyy)</asp:ListItem>
                    <asp:ListItem Value="7">SSN (exact ###-##-####)</asp:ListItem>
                    <asp:ListItem Value="8">Address</asp:ListItem>
                </asp:DropDownList>

如您所见,AutoPostBack设置为false,并且没有事件连接。

按Enter键将触发TextBox的OnTextChanged事件,该事件执行搜索并更新UpdatePanel中的GridView。此UpdatePanel将其UpdateMode设置为条件并具有一个触发器:搜索TextBox的TextChanged事件。

这很简单。

它几乎可以很好地工作。

每当我更改搜索类型时,下一次搜索都会执行完整的回发。除非我再次更改搜索类型,否则所有后续搜索都会进行部分回发(根据需要)。

此规则有一个例外:如果我加载页面并立即更改搜索类型,则不会执行完整的回发。因此,在任何回发(完全或部分)之前DropDownList的第一次更改不会触发完整的回发。

完全披露: 我正在做很多JavaScript来改变异步请求期间gridview的外观。我在这里没有详细说明,因为它似乎无关紧要。仅当未连接JavaScript的DropDownList发生更改时,才会出现此问题。

有什么想法吗?

这让我发疯了。其他一切都在发挥作用。

提前致谢, 克里夫

1 个答案:

答案 0 :(得分:0)

我明白了。问题是DropDownList不在UpdatePanel中。如果没有完整的回发,它就无法获得价值。由于TextChanged事件连接,Tex​​tBox对此免疫。