哼哼哈嘿-关于ListBox和DropDownList
这是刘宁童鞋发现的问题,我以前从未注意过,经过共同努力,终于搞定。
我们一般使用下面这种方式,未这两个控件赋值:
this.ListBox1.Items.Add(new ListItem("哈哈", "1"));this.ListBox1.Items.Add(new ListItem("哼哼", "1"));this.ListBox1.Items.Add(new ListItem("嘿嘿", "1"));
大家注意这个ListItem类在实例化时,需要两个参数,一个是text值,一个是value值。当这几项的value值相同或者都为空时就会出现问题,先看界面布局:

然后上代码:
public partial class _Default : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){GetValue();}}private void GetValue(){this.ListBox1.Items.Add(new ListItem("哈哈", "1"));this.ListBox1.Items.Add(new ListItem("哼哼", "1"));this.ListBox1.Items.Add(new ListItem("嘿嘿", "1"));}protected void Button1_Click(object sender, EventArgs e){ClientScript.RegisterStartupScript(GetType(), "dd", "", false);}
}
上面程序的功能就是在页面加载时为ListBox控件加载三项“哼哼”,“哈哈”,“嘿嘿”。单击按钮显示我们选中的项目,比如,选中“哈哈”,执行结果如图:

再选中“哼哼”,执行结果如下图:






问题出来了,无论你选择任意一项,单击按钮后,选中和显示的都会事第一项“哈哈”。这是为什么呢?
经过我们的努力,终于搞明白了,用户点击按钮,回传到服务器,程序会分析用户选中的是第几项,而程序是如何判断用户选中的项目呢?事实上是根据项目的索引,而如何判断项目的索引呢,事实上是根据每一项的value值。OK,如我们上面那样,所有的VALUE值都一样,那么程序就会认为用户选中的为第一项。这个道理也适用于value值为空字符串的情况下。
虽然我上面一直使用“事实上”,但是这也只是我们的猜测而已。但是我想,离真相已经不远了。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
