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

使用Ajax绑定下拉框时GetCertificate.ID报错问题排查求助

错误原因分析与修复方案

核心错误原因

你在while (ReadData.Read())循环里写的GetCertificate.ID = ...会报错,因为**GetCertificate是类的名称,不是具体的对象实例**。类是一个模板,必须先创建它的实例(比如var certItem = new GetCertificate();),才能给实例的属性赋值。直接操作类的属性只有当属性是static的时候才允许,但你的场景完全不需要静态属性。

其他连带问题(顺便一起修复)

除了这个核心错误,你的代码还有几个和需求不匹配的问题:

  1. 类定义不符合需求:你需要获取CODE_VALUE、CODE_DESC、CODE_SUB_VALUE、CODE_SUB_DESC四个字段,但GetCertificate类只定义了ID和Code_Desc两个属性
  2. SQL查询不完整:你的查询语句SELECT CODE_DESC from tdc_product1只查了CODE_DESC,既没有ID(所以ReadData["ID"]会抛出列不存在的错误),也没有需求里的另外三个字段
  3. 资源未释放:数据库连接和DataReader用完后没有关闭,会导致数据库连接泄漏
  4. 前端拼接逻辑缺失:前端需要把四个字段拼接成(127,CoilWt,1,KGS)的格式,但当前后端返回的数据结构不支持

修正后的完整代码

1. C# 后端代码

首先调整类定义,新增需要的四个字段,然后修正WebMethod的逻辑:

// 调整类,匹配需求的四个字段
public class CertificateItem
{
    public string CodeValue { get; set; }
    public string CodeDesc { get; set; }
    public string CodeSubValue { get; set; }
    public string CodeSubDesc { get; set; }
}

[WebMethod]
public static List<CertificateItem> GetCertificate()
{
    List<CertificateItem> certificateList = new List<CertificateItem>();
    string connStr = ConfigurationManager.ConnectionStrings["conndbprodnew"].ToString();
    
    // 使用using语句自动释放资源(连接、DataReader都会自动关闭)
    using (OracleConnection objconn = new OracleConnection(connStr))
    {
        // 修改SQL,查询需要的四个字段
        string qry = "SELECT CODE_VALUE, CODE_DESC, CODE_SUB_VALUE, CODE_SUB_DESC FROM tdc_product1";
        using (OracleCommand objFetchCmd = new OracleCommand(qry, objconn))
        {
            objconn.Open();
            using (OracleDataReader ReadData = objFetchCmd.ExecuteReader())
            {
                while (ReadData.Read())
                {
                    // 创建类的实例,然后给实例的属性赋值
                    CertificateItem item = new CertificateItem();
                    item.CodeValue = ReadData["CODE_VALUE"].ToString();
                    item.CodeDesc = ReadData["CODE_DESC"].ToString();
                    item.CodeSubValue = ReadData["CODE_SUB_VALUE"].ToString();
                    item.CodeSubDesc = ReadData["CODE_SUB_DESC"].ToString();
                    
                    certificateList.Add(item);
                }
            }
        }
    }
    return certificateList;
}

2. JavaScript 前端代码

修改前端逻辑,把四个字段拼接成需求的格式:

$(function () { 
    $.ajax({ 
        type: "POST", 
        url: "TDC.aspx/GetCertificate", 
        data: '{}', 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (r) { 
            var Certific = $("#Certific"); // 直接用ID选择器更高效
            Certific.empty().append('<option selected="selected" value="0">Please select</option>'); 
            $.each(r.d, function () { 
                // 拼接成(CODE_VALUE,CODE_DESC,CODE_SUB_VALUE,CODE_SUB_DESC)的格式
                var displayText = `(${this.CodeValue},${this.CodeDesc},${this.CodeSubValue},${this.CodeSubDesc})`;
                // 这里的value可以根据业务需求设置,比如用CodeValue或者拼接后的字符串
                Certific.append($("<option></option>").val(this.CodeValue).html(displayText)); 
            }); 
        },
        error: function(xhr, status, error) {
            // 增加错误处理,方便调试
            console.error("获取证书数据失败:", error);
        }
    }); 
});

内容的提问来源于stack exchange,提问作者hari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:55:14