You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:57:03