有一个无效 SelectedValue
的有关信息介绍如下:在asp.net的listview中,我们有时会用到dropdownlist控件,来获取后台某代码列,供用户选择,同时需要将表单数据与dropdownlist控件进行绑定。但是如果获取的表单数据,并没有列表中的项,或者该数据本就为空。这时页面会报错,有一个无效 SelectedValue....很是恼人。原因是微软尚未处理的一个BUG,dropdownlist的元素中并不存在一个SelectedValue属性所指定的值,就是SelectedValue的值,在列表中查找不到,于是报错。
创建一个textbox控件,指定ID为xxx_save,xxx为dropdownlist的ID,这不是规则,是写代码的习惯而已。将该textbox的Visible属性设为false,它只作为存值控件。
给dropdownlist添加SkinID并指向textbox,同时给textbox添加SkinID指向dropdownlist。
给dropdownlist添加OnSelectedIndexChanged方法
给textbox添加OnDataBinding方法
如下
SkinID="drop_list_save" OnSelectedIndexChanged="drop_list_onchange" DataSourceID="bind_data" DataTextField="text" DataValueField="value">
ConnectionString="<%$ ConnectionStrings:dbname %>" SelectCommand="SELECT * FROM [table]">
在后台代码中添加两个方法
protected void drop_list_onchange(object sender, EventArgs e) {
DropDownList ddl = (DropDownList)sender;
TextBox tb = (TextBox)ddl.Parent.FindControl(ddl.SkinID);
tb.Text = ddl.SelectedValue;
}
protected void drop_list_onbinding(object sender, EventArgs e) {
TextBox tb = (TextBox)sender;
DropDownList ddl = (DropDownList)tb.Parent.FindControl(tb.SkinID);
try{
ddl.SelectedValue = tb.Text;
}catch(Exception){
}
}
如上方法的意思是将前台出现的BUG,在后台获取,并不予处理,这样就避免页面报错了。同时也实现了dropdownlist的数据与表单数据绑定。如果出现空值问题,页面会将dropdownlist的值置为列表第一项。问题解决!