mysql - 当日期字段为空时,实体框架 asp net MVC 错误它会在编辑操作期间覆盖现有日期
问题描述
我为 CRUD 项目创建了脚手架控制器,但存在一个错误。当我为 MySql DB 创建新实体(记录)时,它按预期工作,其中一个值是 HiredDate。但是,当我在不同的视图中编辑某些东西时,例如 FiredDate 它会覆盖以前为 HiredDate 创建的记录并将其设置为 0001-01-01 。
这是模型的代码:
[Column("City", TypeName = "varchar(100)")]
public string City { get; set; }
[Required]
[Column("Department", TypeName = "varchar(100)")]
public string Department { get; set; }
[Required]
[Column("HiredDate", TypeName = "date")]
[Display(Name = "Hired On")]
public DateTime HiredDate { get; set; }
[Column("FiredDate", TypeName = "date")]
[Display(Name = "Fired On")]
public DateTime? FiredDate { get; set; }
[Required]
[Column("ModifiedDate", TypeName = "datetime")]
[Display(Name = "Modified Date")]
public DateTime ModifiedDate { get; set; }
和控制器代码编辑:
public async Task<IActionResult> Edit(int id, [Bind("ID,FirstName,LastName,Email,Phone,Age,City,Department,FiredDate")] Employee employee)
{
if (id != employee.ID)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
_context.Update(employee);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!EmployeeExists(employee.ID))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(employee);
}
和用于创建的控制器代码:
public async Task<IActionResult> Create([Bind("FirstName,LastName,Email,Phone,Age,City,Department,HiredDate")] Employee employee)
{
if (ModelState.IsValid)
{
_context.Add(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(employee);
}
我该如何解决?当我执行编辑操作并修改除 HiredDate 之外的任何其他字段时,我希望 HiredDate 保持不变(例如 2020-01-01)。
解决方案
没关系,我发现了这个问题,这个 BIND 确实不是用户友好的,它迫使开发人员在视图中显示所有字段,如果缺少一个字段,它将用空值覆盖缺少的字段。解决方案在编辑视图表单中。此表单应显示您的模型拥有的所有字段。
推荐阅读
- mysql - MYSQL Select 查询卡在“发送数据”中
- postgresql - 如何使用Netcat检查postgresql docker容器是否已启动
- apache-spark - 是否可以在火花中插入临时表?
- bash - 循环但输出被引用的行
- python - Django下拉列表依赖于模型?
- microsoft-graph-api - 无法以 Iana 格式获取支持的时区
- java - 随后在 BLE Android 应用程序中调用 disconnect() 和 close() 是正确的方法吗?
- java - 如何将一个 Eclipse 项目的方法/变量调用到另一个 Eclipse 项目?
- apache-camel - Apache Camel文件端点:Camel测试调用直接组件路由将文件从文件夹A复制到文件夹B
- python - .split() 与 json 文件返回 keyerror