Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当ModelState无效时,如何在使用entity Framework Core重新加载相关实体时保留实体的原始值?_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 当ModelState无效时,如何在使用entity Framework Core重新加载相关实体时保留实体的原始值?

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。如何在不

使用ASP.NET核心和实体框架核心

编辑记录时,我还加载用于编辑表单中显示目的的相关子实体

如果用户提交的表单缺少必填字段,则ModelState.IsValid为false。到目前为止还不错

将未更新的值返回给用户并显示错误消息时,如何保留用户发布的原始值并重新加载相关实体

在下面的简化示例中,dbcontext查询客户机记录并包含关联的状态表以显示状态名称

如果ModelState无效,客户端记录将返回给用户,其中包含用户提交的值,但此时所有相关的.Include实体都为null。如何在不覆盖提交的视图模型的情况下重新填充.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);
}
首先,状态导航属性应该是虚拟的,然后可以使用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);