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

ASP.NET Core中AJAX POST无报错但未保存数据求助

ASP.NET Core AJAX POST 数据未保存问题

在ASP.NET Core中通过按钮OnClick事件调用AJAX向数据库保存记录,函数无错误返回,但数据并未写入数据库。当前使用硬编码数据测试,数据库中已存在AdapollingProjectProcessStatusId = 1的记录。

JavaScript 代码

function SendHtmlEditorValueToController(data) {
    $.ajax({
        type: 'POST',
        url: '@Url.Action("AJAXPost", "LiveAdapollingProjectProcessStatus")',
        contentType: "application/json", 
        data: JSON.stringify({ "id": 1, "status": 'test'}),
        dataType: 'json',
        success: () => {
          console.log("value is sent");
        },
        error: (error) => {
            console.log(JSON.stringify(error));
        }
    });
}

LiveAdapollingProjectProcessStatus 控制器代码

[HttpPost]
public JsonResult AJAXPost(int id, string status)
{
    LiveAdapollingProjectProcessStatus processstatus = new LiveAdapollingProjectProcessStatus
    {
        AdapollingProjectProcessStatusId = id,
        AdapollingProjectProcessStatus = status
    };

    //save it in database
    return Json(processstatus);
}

LiveAdapollingProjectProcessStatus 模型代码

namespace CPSPMO.Models.PMO
{
    public partial class LiveAdapollingProjectProcessStatus
    {
        public int AdapollingProjectProcessStatusId { get; set; }
        public string AdapollingProjectProcessStatus { get; set; }
    }
}

问题排查与解决步骤

  1. 补充数据库上下文与保存逻辑
    控制器仅实例化了模型对象,未执行数据库写入操作。需要注入DbContext实例,针对已存在的记录执行更新逻辑:

    // 首先在控制器构造函数注入DbContext
    private readonly CPSPMODbContext _context;
    
    public LiveAdapollingProjectProcessStatusController(CPSPMODbContext context)
    {
        _context = context;
    }
    
    [HttpPost]
    public JsonResult AJAXPost(int id, string status)
    {
        // 查找数据库中已存在的记录
        var processstatus = _context.LiveAdapollingProjectProcessStatus.Find(id);
        if (processstatus != null)
        {
            // 更新字段值
            processstatus.AdapollingProjectProcessStatus = status;
            // 提交更改到数据库
            _context.SaveChanges();
        }
        else
        {
            // 若记录不存在,执行新增逻辑
            processstatus = new LiveAdapollingProjectProcessStatus
            {
                AdapollingProjectProcessStatusId = id,
                AdapollingProjectProcessStatus = status
            };
            _context.LiveAdapollingProjectProcessStatus.Add(processstatus);
            _context.SaveChanges();
        }
        return Json(processstatus);
    }
    
  2. 优化参数绑定方式
    可以创建DTO类统一接收AJAX参数,避免简单类型绑定可能出现的问题:

    public class StatusUpdateDto
    {
        public int Id { get; set; }
        public string Status { get; set; }
    }
    
    [HttpPost]
    public JsonResult AJAXPost([FromBody] StatusUpdateDto dto)
    {
        // 复用上述数据库操作逻辑,使用dto.Id和dto.Status
        var processstatus = _context.LiveAdapollingProjectProcessStatus.Find(dto.Id);
        if (processstatus != null)
        {
            processstatus.AdapollingProjectProcessStatus = dto.Status;
            _context.SaveChanges();
        }
        return Json(processstatus);
    }
    
  3. 验证请求到达与异常捕获
    在控制器方法中增加异常捕获,同时在前端回调中检查返回结果,确认问题根源:

    [HttpPost]
    public JsonResult AJAXPost(int id, string status)
    {
        try
        {
            var processstatus = _context.LiveAdapollingProjectProcessStatus.Find(id);
            if (processstatus != null)
            {
                processstatus.AdapollingProjectProcessStatus = status;
                _context.SaveChanges();
            }
            return Json(new { success = true, data = processstatus });
        }
        catch (Exception ex)
        {
            return Json(new { success = false, error = ex.Message });
        }
    }
    

    前端对应修改success回调:

    success: (response) => {
      console.log("请求响应:", response);
      if (!response.success) {
        console.error("保存失败:", response.error);
      }
    },
    
  4. 确认请求是否到达控制器
    在控制器方法开头添加日志或断点,验证AJAX请求是否成功进入后端逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:06:30