System.Web.HttpException:无法在 DropDownList 中选择多个项目

问题描述 投票:0回答:4

在页面加载期间,索引 0 已被选择。那么这段代码语句选择了索引1:

dropDownList.Items.FindByValue(myValue).Selected = true; 
// assume myValue is found at index 1 of dropDownList.Items

页面加载完成后,页面显示:“System.Web.HttpException:无法在 DropDownList 中选择多个项目。”

为什么我会遇到异常?我该如何解决它?

c# asp.net drop-down-menu
4个回答
38
投票

我注意到索引 0 和索引 1 的属性“Selected”都设置为 true(dropDownList.Items[0].Selected 和 dropDownList.Items[1].Selected 均为 true)。然而,dropDownList.SelectedIndex 仍然是 0,即使最近设置了索引 1。

我尝试通过事先清除列表选择来解决此问题。

dropDownList.ClearSelection();
dropDownList.Items.FindByValue(myValue).Selected = true;

但这并没有帮助。发生同样的异常。

有什么帮助,是以另一种方式设置所选值:

dropDownList.SelectedIndex = dropDownList.Items.IndexOf(dropDownList.Items.FindByValue(myValue));

现在选择更改会传播到整个列表。

因此,不要使用 dropDownList.Items[x].Selected = true/false 来更改 DropDownList 的选定值。相反,使用 dropDownList.SelectedIndex = x;


22
投票

我刚刚遇到了这个问题,发现它是由不同的东西引起的。我将相同的

ListItem
实例添加到多个下拉列表中:

ListItem item = new ListItem("Foo", "1");
ListItem item2 = new ListItem("Bar", "2");
ddl1.Items.Add(item);
ddl2.Items.Add(item);
ddl1.Items.Add(item2);
ddl2.Items.Add(item2);

然后设置SelectedValue:

ddl1.SelectedValue = "1"; //sets the Selected property of item
ddl2.SelectedValue = "2"; //sets the Selected property of item2

切换为添加单独的

ListItem
实例解决了问题。

我的猜测是,当您设置

SelectedValue
DropDownList
时,它会在其
Selected
集合中相应的
ListItem
上设置
Items
属性。因此,在这种情况下,在第二个代码块的末尾,两个下拉列表中的两个项目都被选中。


0
投票

我遇到了类似的问题,但情况略有不同。我想我应该把它和解决方案发布在这里,因为如果有人碰巧遇到我的类似情况,它可能会帮助他们节省时间。

首先是错误消息:

AMError: Sys.WebForms.PageRequestManagerServerErrorException:
Sys.WebForms.PageRequestManagerServerErrorException: 
Cannot have multiple items selected in a DropDownList.

我的场景:

遇到问题时,我正在使用 VisualStudio 2010 逐步执行应用程序 (ASP VB Net)。我查看了页面上的 2

dropdownlists
,检查了互联网,浪费了几个小时,没有任何解决方案。

分辨率:

然后我就退出了 VS 2010 并休息了一下。当我回来的时候。我重新运行了该应用程序,没有任何问题。就在那时我意识到我犯了一个代价高昂的错误:我设置了一个表达式来设置 调试器观察窗口中的

SelectedValue
!因此,多样性!

我删除了表达式,一切又恢复正常了 --- Visual Studion 2010 能够越过

dropdownlist
部分,进入应用程序的另一个焦点区域。


0
投票

不幸的是,比尔的回答对我不起作用,因为问题主要在于如何构建重复列表。另外,复制并粘贴代码来为 16 个相同的下拉列表创建新列表也违反了我的原则。 (੭°ཀ°)੭

对我有用的是使用这个问题这个问题的答案组合来复制下拉菜单,然后使用SelectedIndex。

        var listShunt = new List<ListItem>();
        while (dr.Read())
        {
            itemShunt = new ListItem(dr["ID","TYPE"]);
            listShunt.Add(itemShunt);
        }
        numberShunt_CH3.DataSource = listShunt.ToArray();
        numberShunt_CH3.DataBind();
        numberShunt_CH3.SelectedIndex = 1;
        ...

        numberShunt_CH7.DataSource = listShunt.ToArray();
        numberShunt_CH7.DataBind();
        numberShunt_CH7.SelectedIndex = 5;
        ...
© www.soinside.com 2019 - 2024. All rights reserved.