【问题标题】:CRUD adding new row instead of updatingCRUD 添加新行而不是更新
【发布时间】:2019-10-30 02:19:39
【问题描述】:

我的 .Net 应用程序中的数据更新出现问题。当我尝试更新时,它会使用新 ID 创建新行,而不是更新现有 ID。

我没有看到问题出在哪里。也许有人可以帮助解决问题。

这是来自控制器的方法:

     public JsonResult SaveDataInDatabase (StudentViewModel model)
    {
        var result = false;
        try
        {
            if (model.StudentId > 0)
            {
                tblStudent Stu = db.tblStudent.SingleOrDefault(x => x.IsDeleted == false && x.StudentId == model.StudentId);
                Stu.StudentName = model.StudentName;
                Stu.Email = model.Email;
                Stu.DepartmentId = model.DepartmentId;
                db.SaveChanges();
                result = true;
            }
            else
            {
                tblStudent Stu = new tblStudent();
                Stu.StudentName = model.StudentName;
                Stu.Email = model.Email;
                Stu.DepartmentId = model.DepartmentId;
                Stu.IsDeleted = false;
                db.tblStudent.Add(Stu);
                db.SaveChanges();
                result = true;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return Json(result, JsonRequestBehavior.AllowGet);
    }

和jQuery函数:

      $("#SaveStudentRecord").click(function () {
    var data = $("#SubmitForm").serialize();
    $.ajax({
        type: "Post",
        url: "/Home/SaveDataInDatabase",
        data: data,
        success: function (result) {
            alert("Success!..");
            window.location.href = "/Home/index";
            $("#MyModal").modal("hide");
        }
    })
})

这是模型视图:

      public class StudentViewModel
{
    public int StudentId { get; set; }

    public string StudentName { get; set; }

    public string Email { get; set; }

    public bool? IsDeleted { get; set; }

    public int? DepartmentId { get; set; }

    public String DepartmentName { get; set; }
}

GetStudentByID 方法:

      public JsonResult GetStudentById (int StudentId)
    {
        tblStudent model = db.tblStudent.Where(x => x.StudentId == StudentId).SingleOrDefault();
        string value = string.Empty;
        value = JsonConvert.SerializeObject(model, Formatting.Indented, new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
        });
        return Json(value, JsonRequestBehavior.AllowGet);
    }

【问题讨论】:

    标签: jquery asp.net ajax rest asp.net-ajax


    【解决方案1】:

    正如您在评论中提到的,将代码更改为此将起作用

    tblStudent Stu = db.tblStudent.FirstOrDefault(x => x.IsDeleted == false && x.Email == model.Email);
    if (Stu != null)
    {
         Stu.StudentName = model.StudentName;
         Stu.Email = model.Email;
         Stu.DepartmentId = model.DepartmentId;
         db.Entry(Stu).State = EntityState.Modified;
         db.SaveChanges();
         result = true;
     }
     else
     {
         tblStudent Stu = new tblStudent();
         Stu.StudentName = model.StudentName;
         Stu.Email = model.Email;
         Stu.DepartmentId = model.DepartmentId;
         Stu.IsDeleted = false;
         db.tblStudent.Add(Stu);
         db.SaveChanges();
         result = true;
      }
    

    只需确保 StudentId 列是自动递增的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2021-07-21
      相关资源
      最近更新 更多