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

ASP.NET Core MVC中SQL数据库数据填充下拉框问题求助

下拉框未加载Counter表数据的排查与修复

核心问题及修复方案

1. SelectListItem构造参数错误

GetCounterData方法中创建下拉选项时,第二个参数传入了空字符串,无法正确获取值字段,导致选项初始化失败:

// 错误代码
SelectListItem item = new(
    results.GetData<string>("CounterType"),
    results.GetData<string>("")
);

修复:指定有效的值字段(若需要值与显示文本一致,可直接复用CounterType;若表中有主键字段如CounterID,建议用主键作为值):

// 示例:值和文本均使用CounterType
SelectListItem item = new(
    results.GetData<string>("CounterType"),
    results.GetData<string>("CounterType")
);

2. 默认选项赋值错误

LoadServiceType中给默认选项重复赋值Text,未设置Value,导致默认项无效:

// 错误代码
var objDefaultListItem = new SelectListItem();
objDefaultListItem.Text = "NoSelection";
objDefaultListItem.Text = "Select Service Type";

修复:分别设置Value和Text属性:

var objDefaultListItem = new SelectListItem();
objDefaultListItem.Value = "NoSelection";
objDefaultListItem.Text = "Select Service Type";

3. 模型缺少绑定属性

视图中asp-for="ServiceType"绑定的属性未在Request模型中定义,导致下拉框无法完成双向绑定:

// 在Request模型中添加
public string? ServiceType { get; set; }

4. Session缓存导致数据不刷新

GetCounterData首次查询后将数据存入Session,后续请求直接读取缓存,若数据库数据更新,下拉框不会同步。若无需缓存,可移除Session相关逻辑:

public List<SelectListItem>? GetCounterData(string strQuery)
{
    List<SelectListItem> ret = [];

    try
    {
        string strConnect = connectionStrings.Get("EquipmentConnectString");

        using (var conn = strConnect.OpenConnection())
        {
            var results = conn.ExecuteReaderText(strConnect, strQuery, []);

            if (results != null)
            {
                while (results.Read())
                {
                    SelectListItem item = new(
                        results.GetData<string>("CounterType"),
                        results.GetData<string>("CounterType")
                    );
                    ret.Add(item);
                }
            }
        }
        return ret;
    }
    catch (Exception objerr)
    {
        // 添加日志记录,避免吞掉异常
        _logger.LogError(objerr, "获取Counter数据失败");
        return null;
    }
}

5. 异常处理未记录错误

原代码吞掉了数据库查询异常,无法定位问题根源,建议注入ILogger记录错误信息,便于排查。

6. SelectList构造参数优化

原代码中SelectList使用"Text"同时作为值字段和显示字段,若需区分值与文本,应对应SelectListItem的Value和Text属性:

ret.Services = new SelectList(lstServiceType, nameof(SelectListItem.Value), nameof(SelectListItem.Text));

验证步骤

  • 直接执行SQL语句Select * from vw_EQCN where countertype = 'ServiceType',确认能查询到有效数据。
  • 检查EquipmentConnectString数据库连接字符串配置正确,数据库连接正常。
  • 在RetrieveCounter方法中添加调试输出,查看objDataView的数量是否大于0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:12:40