c# - 已检索数据但未保存或更新 ASP.NET Core 3.1
问题描述
我的问题与这个问题类似,但我已经应用了答案,但它仍然无法正常工作,并且我在将数据存储在数据库中时使用了稍微不同的方法。
员工模型班
public class Employee
{
[Key]
public int EmployeeId { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
}
键入与保存相关的脚本代码
private urlSaveEmployee = '/employee/save';
private save() {
try {
const employee = this.createEmployee();
Util.request(this.urlSaveEmployee, 'post', 'json', (response) => {
if (response != null) {
$.notify(response.message);
location.reload();
} else {
$.notify(response.message);
console.error('Failed to get data #T7G985. Please try again.');
}
}, () => {
}, employee);
} catch (e) {
console.error(e);
}
}
private createEmployee() {
try {
const employee = {
EmployeeId: $('#employee_id').val(),
Firstname: $('#first_name').val(),
Lastname: $('#last_name').val()
};
return employee;
} catch (e) {
console.error(e);
}
}
保存按钮 查看代码
<tr>
<td style="width: 100px">First Name*</td>
<td>
<input type="hidden" id="employee_id" value="@Employee.EmployeeId" />
<input class="form-control-sm w-100" id="first_name" value="@Employee.FirstName" autocomplete="off" />
</td>
</tr>
<tr>
<td style="width: 100px">Last Name*</td>
<td>
<input class="form-control-sm w-100" id="last_name" value="@Employee.LastName" autocomplete="off" />
</td>
</tr>
<button type="button" class="btn btn-sm btn-outline-primary employee-form-save" id="save_form">
<i class="fa fa-floppy-o" style="margin-right:5px"></i>
Save
</button>
保存相关的控制器代码
[HttpPost("employee/save")]
public async Task<IActionResult> SaveEmployee(Employee employee) {
try
{
Employee employeeFromDb = await _db.Employees.FirstOrDefaultAsync(e => e.EmployeeId == employee.EmployeeId);
if (employeeFromDb == null)
{
_db.Employees.Add(employee);
_db.SaveChanges();
return Json(new { success = true, message = "Saved Successfully" });
} else {
_db.Employees.Update(employee);
_db.SaveChanges();
return Json(new { success = true, message = "Updated Successfully" });
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return Json(new { success = false, message = "Error while saving" });
}
}
当我单击保存按钮时,它会重新加载页面而不做任何更改。我添加了断点,据此employeeFromDb
显然在.Update
子句中,但它只是刷新页面并且数据库保持不变。这是该断点处的屏幕截图:
解决方案
很高兴它起作用了,所以这只是一个测试。您对 EntityState 的发现确实是您应该从本教程中阅读的内容 - https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud?view=aspnetcore-3.1
实体状态 数据库上下文跟踪内存中的实体是否与其在数据库中的相应行同步,并且此信息确定调用 SaveChanges 方法时会发生什么。例如,当您将新实体传递给 Add 方法时,该实体的状态设置为已添加。然后,当您调用 SaveChanges 方法时,数据库上下文会发出一个 SQL INSERT 命令。
如果您查看 Edit 示例,其中 Bind 属性与记录的参数 Id 一起传递,您可能会将其用作您工作的更好示例。但是,如果您想创建一个映射器类来将您的请求对象转换为实体框架对象,以便正确更新它也可以工作。我想知道您之前是否真的遇到过异常但由于断点不在该块上而错过了它。
如果通过 Ajax json 调用绑定,这也很有用 - https://stackoverflow.com/a/60180783/8161471
推荐阅读
- c# - 如何将Word表格单元格中的列表复制到Excel单元格
- typo3 - 自定义 TYPO3 扩展的索引搜索和站点管理的 slug 导致问题
- bosun - 尝试使用 Bosun 中的“保存挂钩”功能时调用保存挂钩失败
- java - Exoplayer 收到警告“SimpleExoPlayer:在错误的线程上访问了播放器。” 如何解决?
- php - Facebook Graph API 获取公共页面的公共帖子
- reactjs - 将 React 组件路由到 Rails 部分?
- optimization - 优化 pyomo 中的 Fortran 函数
- amazon-ecs - 为失败的 ECS 任务创建 CloudWatch 事件规则
- makefile - 为什么目标的先决条件显示为空?
- rust - 如何从 &mut T 转换为 &mut U 类型?