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
相关产品推荐
相关产品推荐

