具有多个下拉列表的更新面板
本文关键字:更新 下拉列表 | 更新日期: 2024-09-21 14:46:48
编辑:在我列出数据库中的一些东西的方法中DropDownList.Items.Clear();
,这导致了问题。 但是,我不明白为什么这会导致问题。如果我能给出一个解释,我将不胜感激,因为我真的需要使用 Items.Clear((;不知何故
我得到了 3 DropDownList
,我根据我在这 3 DropDownList
之一中选择的值来更新特定标签。每个DropDownList
都工作正常,直到我选择下一个,而之前的其他不会通过 UpdatePanel 触发。
例如,第一个可以工作,但是一旦我使用第二个,就会停止工作(标签不会更新(。第二个有效,但一旦使用了第三个DropDownList
,第二个也不起作用,只有第三个DropDownList
工作正常。
如果我立即使用第三个,第一个和第二个DropDownList
也无法通过UpdatePanel工作,也是如此。
换句话说,一旦使用了最新的DropDownList
,它之前的每一个DropDownList
都不会通过UpdatePanel触发。
.aspx:
<asp:DropDownList ID="dpl1" runat="server" OnSelectedIndexChanged="dpl1_OnSelectedIndexChanged" AutoPostBack="True" />
<asp:DropDownList ID="dpl2" runat="server" OnSelectedIndexChanged="dpl2_OnSelectedIndexChanged" AutoPostBack="True" />
<asp:DropDownList ID="dpl3" runat="server" OnSelectedIndexChanged="dpl3_OnSelectedIndexChanged" AutoPostBack="True" />
<asp:UpdatePanel runat="server" ID="UpdatePanel" UpdateMode="Conditional" >
<ContentTemplate>
<asp:Label ID="lblDPB" runat="server"/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="dpl1" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="dpl2" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="dpl3" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
代码隐藏:
protected void dpl1_OnSelectedIndexChanged(object sender, EventArgs e) {
lblDPB.Text = "#1: ";
}
protected void dpl2_OnSelectedIndexChanged(object sender, EventArgs e) {
lblDPB.Text = "#2: ";
}
protected void dpl3_OnSelectedIndexChanged(object sender, EventArgs e)
{
lblDPB.Text = "#3: ";
}
如何同时制作这 3 个作品?
谢谢
清除和填充每个回发的下拉列表会弄乱列表中的选择。调用 Items.Clear()
将清空SelectedValue
并将SelectedIndex
设置为 -1。填写列表后,将选择第一项。所有这些处理都会导致 SelectedIndexChanged
事件在意外时刻触发。
避免此问题的一种方法是在调用 Items.Clear()
之前保存所选值,并在重新填充列表后重新设置它们:
protected void Page_Load(object sender, EventArgs e)
{
...
string val1 = dpl1.SelectedValue;
string val2 = dpl2.SelectedValue;
string val3 = dpl3.SelectedValue;
dpl1.Items.Clear();
dpl2.Items.Clear();
dpl3.Items.Clear();
// Fill the lists here
SafeSelectValue(dpl1, val1);
SafeSelectValue(dpl2, val2);
SafeSelectValue(dpl3, val3);
}
private void SafeSelectValue(ListControl lst, string value)
{
// Makes sure that the value exists before selecting it
if (lst.Items.FindByValue(value) != null)
{
lst.SelectedValue = value;
}
}
顺便说一下,为了查看列表项中的更改,我需要将三个下拉列表放入具有UpdateMode="Always"
的 UpdatePanel 中:
<asp:UpdatePanel runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:DropDownList ID="dpl1" runat="server" OnSelectedIndexChanged="dpl1_OnSelectedIndexChanged" AutoPostBack="True" />
<asp:DropDownList ID="dpl2" runat="server" OnSelectedIndexChanged="dpl2_OnSelectedIndexChanged" AutoPostBack="True" />
<asp:DropDownList ID="dpl3" runat="server" OnSelectedIndexChanged="dpl3_OnSelectedIndexChanged" AutoPostBack="True" />
</ContentTemplate>
</asp:UpdatePanel>