【发布时间】:2016-06-27 22:23:47
【问题描述】:
我的 aspx 页面中有一个复选框列表,如下所示。 chklstOptions 必须允许用户选择 RepOptionA 或 RepOptionB,并且不应同时选中两个复选框。
例如,当 RepOptionA 已被选中时,每当用户选择 RepOptionB 时,必须取消选中 RepOptionA 而应选中 RepOptionB。此外,用户可以在没有任何限制的情况下选中/取消选中其他选项,如 OptionA、OptionB 和 OptionC。有人可以建议一种方法来实现这个
<asp:CheckBoxList ID="chklstOptions" runat="server" RepeatColumns="2" RepeatDirection="Horizontal" Enabled="false" OnSelectedIndexChanged="chklstOptions_SelectedIndexChanged" OnTextChanged="chklstOptions_SelectedIndexChanged" AutoPostBack="True">
<asp:ListItem Text="OptionA" Value="OptionA" ></asp:ListItem>
<asp:ListItem Text="OptionB" Value="OptionB" ></asp:ListItem>
<asp:ListItem Text="OptionC" Value="OptionC" ></asp:ListItem>
<asp:ListItem Text="RepOptionA" Value="RepOptionA" ></asp:ListItem>
<asp:ListItem Text="RepOptionB" Value="RepOptionB" ></asp:ListItem>
</asp:CheckBoxList>
到目前为止,我尝试了以下代码,但没有任何帮助
protected void chklstOptions_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListItem Item in chklstOptions.Items)
{
if (Item.Selected)
{
if (Item.Text == "RepOptionB")
{
if (chklstOptions.Items.FindByText("RepOptionA").Selected == true)
chklstOptions.Items.FindByText("RepOptionA").Selected = false;
chklstOptions.Items.FindByText("RepOptionB").Selected = true;
}
if (Item.Text == "RepOptionA")
{
if (chklstOptions.Items.FindByText("RepOptionB").Selected == true)
chklstOptions.Items.FindByText("RepOptionB").Selected = false;
chklstOptions.Items.FindByText("RepOptionA").Selected = true;
}
}
}
}
【问题讨论】:
-
当你这样做时会发生什么?
-
In the above code at the selectedIndexChanged event, whenever RepOptionA is selected, and user selects the RepOptionB, the RepOptionA remains checked.我希望不选中 RepOptionA,在这种情况下应该选中 RepOptionB。
-
解决方案是创建到 CheckboxLists。一个用于RepoptionA/B,另一个用于其他选项。否则,当用户还单击其他选项时,您将不知道最初选择了哪个选项。您可以这样做,这是可行的,但很麻烦,但是您必须将第一个选择的 RepOption --> A 或 B 存储在服务器上的某个位置,然后相应地停用 A 或 B。当您相应地对齐它们时,用户不会在 UI 中看到实际上有两个复选框列表。