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

MVC项目下拉框传参调用接口获取MSSQL数据无返回问题排查

问题排查:MVC下拉框筛选数据库无返回结果

场景说明:在MVC项目中,通过视图下拉框获取城市、区域参数,筛选MSSQL数据库Pharmacies表(含Address字段)的数据,但前端已确认cityName和areaName有值,点击按钮发起请求后无任何返回。

后端C#接口代码

[HttpPost]
public JsonResult GetPharmacy(string cityName, string areaName)
{
    Project1Entities db = new Project1Entities();
    var query = (from a in db.Pharmacies
                where a.Adress == cityName
                select a);
    var query1 = (from b in query
                where b.Adress == areaName
                select b);
    if (string.IsNullOrEmpty(areaName))
    {
        return Json(new EmptyResult());
    }
    return Json(query1);
}

前端AJAX代码

function SerchallData(selectedCity) {
    var selectedCity = $('#CITY option:selected').val();
    var selectedValue = $('#AREA option:selected').val();
    if ($.trim(selectedValue).length > 0) {
        $.ajax({
            url: '@Url.Action("GetMaskmap", "Getarea")',
            data: { cityName: selectedCity, areaName: selectedValue },
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                $('#Table>tbody').empty();
                for (var i = 0; i < data.length; i++) {
                    var row = $('<tr><td>' + data[i].ID + '</td><td>' + data[i].Name + '</td><td>' + data[i].Adress + '</td><td>' +  data[i].Phonenumber +'</td></tr>');
                    $('#Table>tbody').append(row);
                }
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('Error: ' + textStatus + ' - ' + errorThrown);
            }
        });
    }
}

问题分析与解决

  • 接口路由不匹配
    前端AJAX请求的url指向GetMaskmap方法,但后端实际接口方法名是GetPharmacy,导致请求找不到对应接口。修改前端url为:

    url: '@Url.Action("GetPharmacy", "Getarea")'
    
  • 字段拼写错误
    数据库表字段是Address,但代码中全程写成Adress(少了一个d),导致查询条件永远不匹配。将所有Adress替换为Address。

  • 查询逻辑错误
    现有逻辑要求同一个Address字段同时等于城市名和区域名,正常场景下不可能成立,必然返回空结果。需根据地址格式调整查询逻辑,比如判断地址同时包含城市和区域:

    var query = from a in db.Pharmacies
                where a.Address.Contains(cityName) && a.Address.Contains(areaName)
                select a;
    
  • Linq查询未触发执行
    Linq查询是延迟加载模式,query1只是查询表达式,未实际访问数据库。需添加.ToList()触发查询:

    return Json(query1.ToList());
    
  • 空结果提示缺失
    若查询结果为空,前端不会生成任何表格行,用户会误以为无返回。可在success回调中添加空结果提示:

    success: function (data) {
        $('#Table>tbody').empty();
        if (data.length === 0) {
            $('#Table>tbody').append('<tr><td colspan="4">未找到匹配数据</td></tr>');
            return;
        }
        // 原循环生成行代码
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:25:25