jquery - CRUD 添加新行而不是更新
问题描述
我的 .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);
}
解决方案
正如您在评论中提到的将代码更改为此将起作用
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 列是自动递增的
推荐阅读
- flutter - Flutter 嵌套 ListView
- robotframework - 使用机器人框架操作系统库
- typescript - 如何使用 leaflet-draw 绘制折线以仅获取显示的虚线然后禁用插件?
- oozie - 如何在工作流开始之前终止/取消协调器操作?
- activemq-artemis - 复制的 ActiveMQ Artemis 服务器 - 不复制消息
- javascript - 如何从 react-native-fs 中的隐藏文件夹访问文件
- text - TYPOSCRIPT:stdWrap.replacement 仅在文本字段中
- ms-access-2013 - MS Access 2013 表单显示“记录已锁定以供其他用户编辑”以及由谁编辑
- solr - Solr 中的独立托管资源具有相同的 configSet
- javascript - 用 in 字符串替换两个索引之间的多个字符串