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

在C# Visual Studio中使用jQuery Ajax绑定SQL数据库行的实现问题

问题排查与修复方案

前端代码(Index.cshtml)问题

  1. Ajax回调函数名拼写错误
    原代码中sucesss多写了一个s,正确应为success,这会导致请求成功后无法执行单价赋值逻辑。

    修正后:

    success: function (data) {
        $("#txtUnitPrice").val(parseFloat(data).toFixed(2));
    },
    
  2. 干扰性的alert("No data")
    在#Item的change事件中,无论Ajax请求结果如何都会弹出"No data",且因async: true,弹窗会在Ajax请求完成前触发,完全误导判断。建议直接移除该弹窗。

    修正后:

    $("#Item").change(function () {
        var itemId = $("#Item").val();
        getItemUnitPrice(itemId);
    });
    
  3. 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)问题

  1. 未处理无匹配项的异常
    使用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);
    }
    
  2. 清理无用引用
    代码中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();

额外调试建议

  1. 打开浏览器开发者工具(F12),切换到Network标签,查看Ajax请求的状态码、请求参数和返回内容,确认请求是否正常到达后端、参数是否正确传递、返回数据是否符合预期。
  2. 在后端GetItemUnitPrice方法中添加断点或日志,检查itemId参数是否正确接收,数据库查询是否返回正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:54:34