在C# Visual Studio中使用jQuery Ajax绑定SQL数据库行的实现问题
问题排查与修复方案
前端代码(Index.cshtml)问题
Ajax回调函数名拼写错误
原代码中sucesss多写了一个s,正确应为success,这会导致请求成功后无法执行单价赋值逻辑。修正后:
success: function (data) { $("#txtUnitPrice").val(parseFloat(data).toFixed(2)); },干扰性的
alert("No data")
在#Item的change事件中,无论Ajax请求结果如何都会弹出"No data",且因async: true,弹窗会在Ajax请求完成前触发,完全误导判断。建议直接移除该弹窗。修正后:
$("#Item").change(function () { var itemId = $("#Item").val(); getItemUnitPrice(itemId); });GET请求冗余的
contentType设置
GET请求参数通过URL传递,无需设置contentType: 'application/json; charset=utf-8',该配置仅适用于POST请求的JSON请求体,移除后可避免潜在解析问题。同时建议统一路由命名为PascalCase,符合后端规范。修正后:
function getItemUnitPrice(itemId) { $.ajax({ async: true, type: 'GET', dataType: 'JSON', data: { itemId: itemId }, url: '/Home/GetItemUnitPrice', success: function (data) { $("#txtUnitPrice").val(parseFloat(data).toFixed(2)); }, error: function (xhr, status, error) { console.log("请求错误详情: " + error); // 用控制台打印错误,方便调试 alert("获取单价时出现问题。"); } }); }
后端代码(HomeController.cs)问题
未处理无匹配项的异常
使用Single()方法时,若数据库中不存在对应itemId的记录,会直接抛出异常导致请求返回500错误。应改用SingleOrDefault()并做空值判断。同时统一方法名为PascalCase,符合C#命名规范。修正后:
[HttpGet] public JsonResult GetItemUnitPrice(int itemId) { var targetItem = objRestaurantDbEntities.Items.SingleOrDefault(model => model.ItemId == itemId); decimal unitPrice = targetItem != null ? targetItem.ItemPrice : 0; return Json(unitPrice, JsonRequestBehavior.AllowGet); }清理无用引用
代码中using Microsoft.Azure.WebJobs;和using Microsoft.SqlServer.Server;未被使用,可直接删除以减少混淆。
ItemRepository.cs问题
下拉框错误默认选中所有项
原代码中Selected = true会导致下拉框所有选项都被选中,不符合交互逻辑。应移除该设置,让下拉框默认选中第一个选项或保持未选中状态。
修正后:
objSelectListItems = (from obj in objRestaurantDbEntities.Items select new SelectListItem() { Text = obj.ItemName, Value = obj.ItemId.ToString() }).ToList();
额外调试建议
- 打开浏览器开发者工具(F12),切换到Network标签,查看Ajax请求的状态码、请求参数和返回内容,确认请求是否正常到达后端、参数是否正确传递、返回数据是否符合预期。
- 在后端
GetItemUnitPrice方法中添加断点或日志,检查itemId参数是否正确接收,数据库查询是否返回正确结果。
内容的提问来源于stack exchange,提问作者bbforbs
相关产品推荐
相关产品推荐

