【发布时间】:2019-06-24 12:11:13
【问题描述】:
使用 ASP.NET Core 和 Entity Framework Core。
编辑记录时,我还会加载相关的“子”实体,用于在编辑表单中显示。
如果用户提交的表单缺少必填字段,则ModelState.IsValid 为假。 到目前为止一切顺利。
当将未更新的值返回给用户(带有错误消息)时,如何保留用户发布的原始值并重新加载相关实体?
在以下简化示例中,dbcontext 查询客户端记录并包含关联的状态表以显示状态名称。
如果ModelState 无效,则客户端记录会连同用户提交的值一起返回给用户——但此时所有相关的.Include 实体都为空。如何在不覆盖提交的视图模型的情况下重新填充 .Include 实体?
// GET
public async Task<IActionResult> Edit(int clientId)
{
var client = _context.Client
.Include(x => x.State)
.Where(w => w.client_id == clientId
.FirstOrDefault();
return View(client);
}
// POST
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(clientModel)
{
//verify: last_name
if (clientModel.last_name == null)
{
ModelState.AddModelError(string.Empty, "Last name is required");
}
if (ModelState.IsValid)
{
// Update the record and redirect
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index), new { client_id = clientModel.client_id });
}
// model state is not valid! Return record submitted to the edit view
// *** MISSING THE VALUES FROM THE RELATED ENTITY clientModel.State at this point
return View(clientModel);
}
【问题讨论】:
标签: c# asp.net-core entity-framework-core