情况 - > 使用了两个ajax控件....
第一个
充当提示符,即人物类型在文本框中表示字母l,并且以l开头的选项被显示以供用户单击并选择。
第二个ajax控件
也可以作为提示符,也就是说,当您在第二个文本框中键入字母l时,它会显示选项,但仅限于在第一个文本框中选择的选项中可用的选项。
我想将第二个ajax控件转换为下拉列表,也就是说,所有选项应该出现在第一个文本框中选择的选项中,但是作为下拉列表而不是提示符。如何实现这一目标?
答案 0 :(得分:0)
我会将2个DropDownLists中的每一个放在各自的UpdatePanels中,并将初始TextBox放在外面:
<asp:TextBox ID="tbLetterChoice" MaxLength="1" runat="server" AutoPostBack="true" OnTextChanged="ShowDropDown1Options" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tbLetterChoice" EventName="TextChanged" />
</Triggers>
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ShowDropDown2Options" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" />
</Triggers>
<ContentTemplate>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DoSomething" />
</ContentTemplate>
</asp:UpdatePanel>
在代码隐藏中需要两个小方法来填充DropDownLists:
protected void ShowDropDown1Options(object sender, EventArgs e){
DropDownList1.Items.Clear();
// populate DropDownList1 based on tbLetterChoice.Text
}
protected void ShowDropDown2Options(object sender, EventArgs e){
DropDownList2.Items.Clear();
// populate DropDownList2 based on DropDownList1.SelectedValue
}
protected void DoSomething(object sender, EventArgs e){
// take action based on final choice from DropDownList2
}
因此,用户在'tbLetterChoiceand'中键入一个字母,然后输入。这会更新'DropDownList1'。用户从'DropDownList1'中选择项目,并填充'DropDownList2'。用户从'DropDownList2'中选择项目,程序执行'DoSomething()'。