Использование ASP.NET Core и Entity Framework Core.
При редактировании записи я также загружаю связанные «дочерние» объекты, используемые для отображения, в форме редактирования.
Если пользователь отправляет форму с пропущенными обязательными полями, то ModelState.IsValid
имеет значение false. Пока все хорошо.
При возврате необновленных значений пользователю (с сообщением об ошибке), как я могу сохранить исходные значения, опубликованные пользователем, а также перезагрузить связанные сущности?
В следующем упрощенном примере 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);
}