是不是DropDownList控件的bug!试试就有结论~

easydone 2004-05-11 08:43:50
步骤如下:
我用的是Visual Studio .Net 2003
1)新建一个项目(Ctrl+N)选Visual C#项目的ASP.NET Web应用程序。

2)在默认页中从“工具箱”-Web窗体控件中,拖入一个DropDownList控件。

3)选中该DropDownList控件,设置其“Items”属性,加入5个列表项。设置如下:
Item1.Text="1";Item1.Value="1"
Item2.Text="2";Item1.Value="2"
Item3.Text="3";Item1.Value="2"
Item4.Text="4";Item1.Value="2"
Item5.Text="5";Item1.Value="2"
(关键在于后几项的Value值相同!)

4)简便起见将该DropDownList控件的AutoPostBack属性设置为"true".

5)现在运行此项目。当网页出现时,你试着从下拉列表中选择Item3--Item5,会出现什么?

-----------------------------------
每次被选中的列表项都是Item2!即:"Value"属性相同的,索引值最小的Item2!
我调程序一晚上才发现这个问题,郁闷!我查询了MSDN文档,好像没有说value属性与index有什么相关的。这是不是bug呢?我不知道。还是提醒大家一下,用到下拉列表框的同志们,注意了!这就是我一晚上的成果,不知道值不值!




...全文
67 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
easydone 2004-05-12
  • 打赏
  • 举报
回复
将DropDownList解释成HTML的select是毫无疑问的!

在HTML中我们知道select提供的功能属性是有限的,但问题的关键是为什么.NET要将DropDownList中不能唯一标示特定列表项的Item.Value进行转换并PostBack,而不是选择类似Item.Index进行转换呢?

哪个更合理?
rickjelly2004 2004-05-12
  • 打赏
  • 举报
回复
不算, selectvalue就靠它选项的
easydone 2004-05-12
  • 打赏
  • 举报
回复
讨论这个问题的关键不在于仍定是不是bug,而在于方便大家开发,不要像我一样整整一晚上才找到问题所在,实在是浪费!感谢同行,尤其是“inelm(木野狐)”。
nchen123 2004-05-12
  • 打赏
  • 举报
回复
index 只能表示序号, 而 value 则可以是任意字符串值, 作为一个 key 来关联相关的选项, 这就是 index 的局限吧。
nchen123 2004-05-12
  • 打赏
  • 举报
回复
to easydone(无坚不摧) :

因为 html 里面 select 控件的 value 属性才是用来判断选项的, 而 .net 的 DropDownList 解析成 html 后 value 属性就是对应的这个 select 标签的 value 属性。
从 select 标签的功能来看, 本来就是用来在多个里面选一个或者多个,你说设置 很多项相同的 value 有什么实际意义呢?

如果你能举出这样用的一个有用的例子, 我敢保证肯定有其他的 tag 能够做的更好, 而且更加合理。 在这种情况下就说明根本不需要使用 DropDownList 了
s3n 2004-05-11
  • 打赏
  • 举报
回复
DropDownList解释成HTML就是select.
它向服务器postback的值是option的value.
服务器只能得到这个值,然后更新DropDownList的ViewState
所以没办法判断你到底选择哪一个.
非BUG也.
easydone 2004-05-11
  • 打赏
  • 举报
回复
"我想这个应该不算 bug 吧, 按照常规的思维方法, DropDownList 本质上到了客户端都是 select 标签, 不同的选项设置成相同的 value 不具有实际意义。" -- inelm(木野狐)

其实不然,虽然在客户端的表现形式是相同的,但往往我们需要在服务器端能够将控件的状态和附加的信息记忆下来弥补http协议先天的不足,或是便于我们实现。我们通过这些状态信息或附加数据来设计不同的相应。对于下拉列表控件来说,Text属性是给用户提供的,而Value属性则是给开发人员提供的。在此例中我就是想通过每个列表项的Value属性来存储列表项的分组信息的。
就像Visual Basic中很多对象都有tag属性一样,我想Value属性的设计初衷也应该这样考虑的吧。
cuike519 2004-05-11
  • 打赏
  • 举报
回复
在服务器上我想它是应该根据viewstate来判断客户端的状态是否变化了!

以前记得看过一篇文章分析ViewState的现在怎么找不到了?郁闷!
nchen123 2004-05-11
  • 打赏
  • 举报
回复
我想这个应该不算 bug 吧, 按照常规的思维方法, DropDownList 本质上到了客户端都是 select 标签, 不同的选项设置成相同的 value 不具有实际意义。
cuike519 2004-05-11
  • 打赏
  • 举报
回复
我试过了,果然有这个问题!以前从来没有发现!
测试情况:
<asp:DropDownList id="DropDownList1" style="Z-INDEX: 101; LEFT: 176px; POSITION: absolute; TOP: 152px"
runat="server" AutoPostBack="True">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="2">3</asp:ListItem>
<asp:ListItem Value="2">4</asp:ListItem>
</asp:DropDownList>
CS:
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) {
this.Page.Response.Write(this.DropDownList1.SelectedItem.Text+":"+this.DropDownList1.SelectedValue);
}
还在进一步测试看看原因在哪里!:-)
cuike519 2004-05-11
  • 打赏
  • 举报
回复
有意思,试一试先!

62,046

社区成员

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

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

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

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