条件:
新开一个asp.net网页
放置一个DropDownList1  
   一个:Button1 Text="填值";
   再一个:Button2 Text="刷新";代码如下:
    protected void Button1_Click(object sender, EventArgs e)
    {        DropDownList1.Items.Clear();
        for (int i = 0; i < 10; i++)
            for (int j = 10; j < 20; j++)
            {
                DropDownList1.Items.Add(new ListItem(j.ToString()+"-V:"+i.ToString (), i.ToString()));             
            }
    }
ok!现在奇怪的现象出来了。
运行。按了Button1之后。DropDownList1的显示值如下:
10-V:0
11-V:0
...
19-V:0
10-V:1
11-V:1
12-V:1
...
19-V:1
10-V:2
11-V:2
12-V:2
...
...
19-V:9现在选DropDownList1中的值,比如:15-V:3
再按Button2.刷新页面, DropDownList1的值将变成:10-V:3再如:19-V:8 按Button2。值将变成:10-V:8邪门!不信的试试。当

解决方案 »

  1.   

    你们试没有?
    每次选择了DropDownList1中的值,按刷新都要返回成是10-V:(n)  这项,其中N为它的Value
      

  2.   

    这个是ViewState的问题吧,只要每项的Value不同就OK了 private void Button1_Click(object sender, System.EventArgs e)
    {
    DropDownList1.Items.Clear();
    for (int i = 0; i < 10; i++)
    for (int j = 10; j < 20; j++)
    {
    DropDownList1.Items.Add(new ListItem(j.ToString()+"-V:"+i.ToString (), i.ToString() + j.ToString()));
    }
    }
      

  3.   

    我知道,问题就是Value一样,为什么它找到的是最上面不一样的VALUE值作为SelectIndex
      

  4.   

    应该是找到第一个相同的value的item做为选中.
      

  5.   

    对于Html中的Select,每一项的不同是通过Value值区分的(相同的Value没什么意义)
      

  6.   

    介绍三个C#技术群:
                     C#程序员在长沙1 群号:15283069
                     C#程序员在长沙2 群号:8689365
                     C#程序员在长沙3 群号:15082848
      

  7.   

    cpp2017(慕白兄)
    ----------------------
    支持!
    up
      

  8.   

    Value可以确定SelectIndex。
    如果有相同的Value,就要取默认吧?
      

  9.   

    DropDownList1.Items.Add(new ListItem(j.ToString()+"-V:"+i.ToString (), i.ToString()));
    你这样让多个ListItem的Value相同(都是i.ToString()),PostBack之后当然不能区分啊,因此只选Value相同的第一个。
      

  10.   

    Value 值是不能重的,重复的取第一个。
      

  11.   

    DropDownList1.Items.Clear();
        for (int i = 0; i < 10; i++)
            for (int j = 10; j < 20; j++)
            {
                DropDownList1.Items.Add(new ListItem(i.ToString() + "-V:" + j.ToString(), j.ToString()));
            }
      

  12.   

    其实大家应该多想想这个的应用出现的问题。
    我是这样出现问题的。
    DropDownList中的TEXT和VALUE对应如下:
    TEXT        Value
    一楼用户    1lou
      张三   1lou
      李四      1lou
    二楼用户  2lou
      刘二   2lou
      陈八      2lou
    ...也就是用户选某个TEXT。我通过SelectItem就能得到它所对应的1lou or 2lou这个值。
    选择
    二楼用户  2lou
      刘二   2lou
      陈八      2lou
    以上三个选项的任何一个TEXT。都将返回2lou.但问题就出现了。选择”陈八“,结果刷新读SelectItem的TEXT。显示的是”二楼用户”不知道我说的大家清楚没有?只是讨论讨论,
      

  13.   

    我不明白你想讨论什么咯,其实我们的回帖都说得很清楚,选项只会根据Value判别,而不管Text。如果你想知道背后的实质,可以这样说:在生成HTML是,Text和Value都输出了,所以浏览器中看到Text。当用户选取一个项目然后按提交时,发送的只是Value,这是规则,你无法改变的。然后服务器端只接收到Value,而全然不知道选中那个的Text是什么,如果遇到重复的话它当然就只懂得取第一个。
      

  14.   

    讨论的是这类问题在前提必定的情况下,如何解决这个“BUG”。而不是讨论为什么会这样。
      

  15.   

    这是无法解决啊。从原理不是说明了吗?既然服务器端无法接受到Text值,那么一旦出现Value重复,这就是非法的赋值。这可以分两种情况说:1.要么说是使用者的错,因为使用这没有确保DropDownList的项目唯一性。2.要么说是.NET Framework的错,因为允许错误状态存在。一个好的Framework应该在遇到错误状态时抛出Exception,例如一旦加入一个项目后将会发生Value重复,则不允许加入并抛出Exception。而我个人更倾向于结合上述两者的看法。首先从框架易用性来说,应该允许用户在赋值过程中可能出现非法状态。但是当赋值确定后,错误状态就应该抛出Exception,而我认为这应该在Render时判断。所以我觉得改进方案应该是在Render是判断是否有重复项,如果有就抛出Exception。然而DropDownList的行为不由你和我来改变,有建议可以反映给.NET Framework Team,除此之外没什么能做的。如果说做好自己的工作,就是自己去保证不存在重复项。