ASP.NET DropDownList控件SelectedValue始终获取第一个值的问题
解决ASP.NET DropDownList点击按钮始终获取第一个选项值的问题
这问题我做ASP.NET项目时也踩过一模一样的坑,核心原因是你没在页面回发时跳过DropDownList的数据源绑定操作!
ASP.NET的页面生命周期里,Page_Load事件会先于按钮点击事件执行。如果每次页面请求(包括按钮触发的回发)都重新绑定DropDownList的数据源,就会把用户刚选中的选项直接覆盖掉,导致按钮事件里永远拿到第一个选项的值。
解决方案:给Page_Load的绑定代码加上IsPostBack判断
修改你的Page_Load代码,只在页面首次加载时绑定数据源,回发时跳过绑定,这样就能保留用户的选中状态:
protected void Page_Load(object sender, EventArgs e) { // 仅当页面不是回发请求时才绑定数据源 if (!IsPostBack) { combo.DataSource = ds3.Tables[0]; // 这里可以直接写列名字符串,没必要通过Columns对象取名字,更简洁 combo.DataTextField = "ProjectName"; combo.DataValueField = "ID"; combo.DataBind(); } }
额外检查项
- 确认DropDownList的
EnableViewState属性是true(默认就是true),这个属性负责在回发时保存控件的选中状态,如果禁用了也会导致选中值丢失。 - 按钮点击事件里的代码不用修改,只要上面的绑定逻辑修复了,
combo.SelectedValue就能正确获取用户选中的项目ID了。
内容的提问来源于stack exchange,提问作者Saeed Areffard
相关产品推荐
相关产品推荐

