ASP.NET联动DropDownList首次绑定显示异常问题求助
解决DropDownList联动首次显示对象名称的问题
问题原因
你遇到的是典型的绑定顺序错误问题!看你提供的代码片段,你先给第二个下拉框设置了DataSource并调用DataBind(),之后才指定DataTextField和DataValueField——这会导致首次绑定的时候,控件没有明确要显示的字段,只能默认调用UbData对象的ToString()方法(也就是你看到的对象名称)。
为什么后续选择会恢复正常?因为第一次绑定后,你设置的DataTextField和DataValueField会被保存到ViewState中,后续回发时控件会自动读取这些设置,绑定行为就正常了。但首次触发事件时,这些属性还是默认值,所以才会出现异常。
解决方案
调整绑定代码的顺序,确保在调用DataBind()之前设置DataTextField和DataValueField。修改后的代码如下:
// 获取数据库返回的UbData列表 List<UbData> uN = WCFClient.Client<IT1Service>(webservice).GetListOfUbis(mam, lin); // 先指定要绑定的文本和值字段 ddlNRCUb.DataTextField = "Ub"; ddlNRCUb.DataValueField = "Ub"; // 再设置数据源并执行绑定 ddlNRCUb.DataSource = uN; ddlNRCUb.DataBind(); // 启用第二个下拉框 ddlNRCUb.Enabled = true;
或者也可以用这种等价的顺序(先设数据源,再指定字段,最后绑定):
List<UbData> uN = WCFClient.Client<IT1Service>(webservice).GetListOfUbis(mam, lin); ddlNRCUb.DataSource = uN; ddlNRCUb.DataTextField = "Ub"; ddlNRCUb.DataValueField = "Ub"; ddlNRCUb.DataBind(); ddlNRCUb.Enabled = true;
额外优化建议
为了彻底杜绝这类问题,你可以在页面初始化阶段(Page_Load)就给第二个下拉框设置好字段映射,哪怕初始是禁用状态:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 初始化第一个下拉框的逻辑... // 提前设置第二个下拉框的字段映射 ddlNRCUb.DataTextField = "Ub"; ddlNRCUb.DataValueField = "Ub"; ddlNRCUb.Enabled = false; } }
另外请确认UbData类的Ub属性是公共可访问的(public),并且有正确的getter方法,确保DropDownList能正常读取该属性的值。
内容的提问来源于stack exchange,提问作者Kam
相关产品推荐
相关产品推荐

