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; } } }
问题排查与解决步骤
补充数据库上下文与保存逻辑
控制器仅实例化了模型对象,未执行数据库写入操作。需要注入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); }优化参数绑定方式
可以创建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); }验证请求到达与异常捕获
在控制器方法中增加异常捕获,同时在前端回调中检查返回结果,确认问题根源:[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); } },确认请求是否到达控制器
在控制器方法开头添加日志或断点,验证AJAX请求是否成功进入后端逻辑。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

