关于错误:不能在 DropDownList 中选择多个项。选项不知原因变为selected=true

Rumia 2016-06-13 05:19:47
非常奇怪

页面上一个DropDownList控件,非常普通:

<asp:DropDownList ID="SearchDeptDrop" runat="server">
</asp:DropDownList>

控件内选项在Page_load时动态生成:

DataTable Depts=getDepts();
foreach (DataRow dr in Depts.Rows)
{
ListItem LI = new ListItem();
LI.Value = dr[0].ToString();
LI.Text = dr[1].ToString();


SearchDeptDrop.Items.Add(LI);//添加选项进DropDowdList
}

页面上点击一个按钮 首先在PAGE_LOAD执行到最末尾:


如图,此时ListItem[1].Selected=false

按F11按步执行,进入按钮事件处理内时:


如图,不知道为什么ListItem[1].Selected=true 且ListItem.Selected=true 冲突导致报错。

目前姑且在按钮事件内强制重置了DropDownList内的SeltectedItem,算是回避了报错

求问原因及怎么解决
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 qw85197093 的回复:
Page_Load 中是不是有给SearchDeptDrop进行数据绑定的代码?这样的话每次点击按钮,SearchDeptDrop都要重新加载。要是有的话还是写在!ispostback中吧。 该死的验证码,累死我了
他在图二已经贴了代码。然而这个代码跟后边的调试画面根本对不上号!这里跟写不写 IsPostback 都无关了,就算是写了,也一定会执行到 lz 根本没有贴出来的其它的真正造成 bug 的代码去的。 有些人就是喜欢用尽量零散的、底层的、抄来的代码来堆在一起。然后出了bug 以后又不太负责,喜欢发呆。这时候最好的编程习惯就是使用傻瓜化的声明方式,尽量不要写代码。 不写代码、而用鼠标“拖拖拉拉”,设置一些简单的声明,这种傻瓜化的编程方式,最稳定。
  • 打赏
  • 举报
回复
把所有为 SearchDeptDrop 设置任何内容的代码都删掉,把要绑定的机制在图一的设计页面去设置,例如关联一个 ObjectDatasource 控件,从而将你的 DropdownList 的 MVP 式的设计改为一个 mvc 式的编程设计。 少写代码,你就不会纠结了。因为可以看得出来,你在出了问题时喜欢隐瞒代码,而不是开放式地报告bug。
让我睡一会儿 2016-06-13
  • 打赏
  • 举报
回复
Page_Load 中是不是有给SearchDeptDrop进行数据绑定的代码?这样的话每次点击按钮,SearchDeptDrop都要重新加载。要是有的话还是写在!ispostback中吧。 该死的验证码,累死我了
Rumia 2016-06-13
  • 打赏
  • 举报
回复
引用 1 楼 qw85197093 的回复:
点击按钮本来就会执行PAGE_LOAD事件,如果这个事件中的功能你只想在页面初期加载的是否实现,那你就把代码写在if(!ispostback)中。 ListItem[1].Selected=false是什么? 此时DropDownList选择的是第一个。 ListItem[1].Selected=true 写成DropDownList.selectedindex=1; ListItem.Selected=true 不懂你是什么意思,DropDownList只能选择一个,你要确定选择的是第几个。
抱歉,没表达清楚。 每次Page_Load时都会重新加载SearchDeptDrop.Items; Page_Load事件内没有对SearchDeptDrop的任意Item做ListItem.Selected=true的操作 故默认:SearchDeptDrop.Items[0].Selected=true;其余false; 然而在程序运行到按钮事件时,SearchDeptDrop.Items[1].Selected不知道为什么也变为了true;
让我睡一会儿 2016-06-13
  • 打赏
  • 举报
回复
点击按钮本来就会执行PAGE_LOAD事件,如果这个事件中的功能你只想在页面初期加载的是否实现,那你就把代码写在if(!ispostback)中。 ListItem[1].Selected=false是什么? 此时DropDownList选择的是第一个。 ListItem[1].Selected=true 写成DropDownList.selectedindex=1; ListItem.Selected=true 不懂你是什么意思,DropDownList只能选择一个,你要确定选择的是第几个。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧