C# 当ModelState无效时,如何在使用entity Framework Core重新加载相关实体时保留实体的原始值?
使用ASP.NET核心和实体框架核心 编辑记录时,我还加载用于编辑表单中显示目的的相关子实体 如果用户提交的表单缺少必填字段,则ModelState.IsValid为false。到目前为止还不错 将未更新的值返回给用户并显示错误消息时,如何保留用户发布的原始值并重新加载相关实体 在下面的简化示例中,dbcontext查询客户机记录并包含关联的状态表以显示状态名称 如果ModelState无效,客户端记录将返回给用户,其中包含用户提交的值,但此时所有相关的.Include实体都为null。如何在不覆盖提交的视图模型的情况下重新填充.Include实体C# 当ModelState无效时,如何在使用entity Framework Core重新加载相关实体时保留实体的原始值?,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,使用ASP.NET核心和实体框架核心 编辑记录时,我还加载用于编辑表单中显示目的的相关子实体 如果用户提交的表单缺少必填字段,则ModelState.IsValid为false。到目前为止还不错 将未更新的值返回给用户并显示错误消息时,如何保留用户发布的原始值并重新加载相关实体 在下面的简化示例中,dbcontext查询客户机记录并包含关联的状态表以显示状态名称 如果ModelState无效,客户端记录将返回给用户,其中包含用户提交的值,但此时所有相关的.Include实体都为null。如何在不
// 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);
}
首先,状态导航属性应该是虚拟的,然后可以使用wait\u context.EntryclientModel.Referencex=>x.State.LoadAsync加载它
如果相关的是一个集合,那么可以使用wait _context.EntryclientModel.Collectionx=>x.collection.LoadAsync
另一种方法是从上下文中获取数据并分配它
var client = _context.Client
.Include(x => x.State)
.Where(w => w.client_id == clientId
.FirstOrDefault();
//or just get the state .. var state = _context.State..
clientModel.State = client.State;
return View(clientModel);