ASPX页面无法访问下拉列表对象 代码后置填充时提示DriverObjNameDD不存在
错误原因
DriverObjNameDD位于ListView的InsertItemTemplate模板内部,不属于页面根级控件,ASP.NET不会自动生成页面对象的对应成员,所以直接通过ID引用会报「当前上下文中不存在该名称」的错误。- 直接对ListView调用FindControl也找不到,必须定位到
InsertItem这个容器之后再调用FindControl查找目标控件。
修正方案
步骤1:抽取下拉框绑定逻辑
把下拉框的绑定逻辑抽为独立方法,先定位容器再查找控件:
private void BindDriverDropdown() { // 先判断ListView的InsertItem是否存在 if (TypeTemplateLV.InsertItem == null) return; // 从InsertItem容器中查找目标下拉框 DropDownList DriverObjNameDD = TypeTemplateLV.InsertItem.FindControl("DriverObjNameDD") as DropDownList; if (DriverObjNameDD == null) return; // 绑定数据逻辑 string constr = ConfigurationManager.ConnectionStrings["DefaultEstimateConnection"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand("SELECT ID, Name FROM et_DriverObject", con)) { DataTable DrvrObjdt = new DataTable(); SqlDataAdapter DrvrObjda = new SqlDataAdapter(cmd); DrvrObjda.Fill(DrvrObjdt); // 注意顺序:先设置映射字段,再执行绑定 DriverObjNameDD.DataSource = DrvrObjdt; DriverObjNameDD.DataTextField = "Name"; DriverObjNameDD.DataValueField = "ID"; DriverObjNameDD.DataBind(); } } }
步骤2:在正确的时机调用绑定方法
在Page_Load完成ListView初始绑定后调用该方法:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 原有ListView绑定逻辑 string constr = ConfigurationManager.ConnectionStrings["DefaultEstimateConnection"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { using (SqlCommand cmd = new SqlCommand("SELECT * FROM et_TypeObject")) { DataTable TypeObjdt = new DataTable(); SqlDataAdapter TypeObjda = new SqlDataAdapter(cmd); TypeObjda.Fill(TypeObjdt); TypeTemplateLV.DataSource = TypeObjdt; TypeTemplateLV.DataBind(); } } // 调用下拉框绑定方法 BindDriverDropdown(); } }
步骤3:补充回发场景的绑定逻辑
如果页面有其他回发操作会触发ListView重新绑定,在对应操作结束后也需要调用BindDriverDropdown(),保证下拉框数据正常加载。
代码优化提示
- 原有代码中
ExecuteNonQuery是冗余逻辑,用SqlDataAdapter填充DataTable时不需要手动执行该方法,也不需要手动打开/关闭连接,Fill方法会自动处理连接生命周期。 - 你原有代码中引用的
DriverObjName是错误ID,正确ID为DriverObjNameDD。 - 绑定下拉框时必须先设置
DataTextField、DataValueField再调用DataBind,顺序颠倒会导致下拉框显示System.Data.DataRowView这类异常值。
内容的提问来源于stack exchange,提问作者MDDeVane
相关产品推荐
相关产品推荐

