我为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确实不是用户友好的,它迫使开发人员显示视图内的所有字段,如果缺少该字段,则将使用空值覆盖该字段。解决方案在“编辑视图表单”中。该表格应显示模型具有的所有字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句