Лучший способ передать сложный объект между запросами в ASP.Net Core MVC - PullRequest
0 голосов
/ 29 апреля 2019

Я все еще изучаю ядро ​​asp.net и мне нужно знать, правильно ли я решаю эту проблему. В моем приложении есть страница, которая действует как мастер для создания сложного объекта. Я использую модель представления для управления входами. Краткий обзор модели представления:

Мастер-объект

-2 дочерних объекта (каждый из которых содержит 3 дочерних объекта)

-Второй дочерний объект (который содержит 1 дочерний объект)

Я дошел до того, что я могу создать Мастер Объект и всех детей без каких-либо проблем. Следующим шагом является добавление опции поиска для 2 дочерних объектов.

В настоящее время у меня есть ссылка на страницу поиска для дочернего объекта, я использую TempData для передачи идентификатора выбранного объекта обратно (поскольку TempData не поддерживает сложные объекты). На исходном контроллере я проверяю TempData для ключа, и если он существует, я запрашиваю базу данных (через _context) для выбранного объекта.

Детский контроллер:

TempData["ChildObjectId"] = SelectedID;
return Redirect(MasterObjectControllerCreationURL);

Контроллер главных объектов:

if (TempData.ContainsKey("ChildObjectId"))
{
  ViewData["ChildObject"] = _context.ChildObject.Include(x => x.SubObject).Where(x => x.ChildObjectId == Convert.ToInt32(TempData["ChildObjectId"])).FirstOrDefault();
TempData.Remove("ChildObjectId");
}

Страница создания главного объекта:

  if (ViewData.ContainsKey("ChildObject"))
  {
    Set field variables for the fields we want.
  }

В конечном итоге это приводит к 2 вызовам в базе данных, один для поиска, а затем один для следующего поиска. Это самый эффективный способ решения проблемы или есть лучшее решение? Кажется, должен быть более эффективный способ справиться с этим. Я знаю, что мог бы просто установить TempData для всех рассматриваемых полей, но это привело бы к тому, что 40 возможных полей были бы сохранены в TempData. Может быть, это не проблема и это правильный путь, я просто недостаточно знаю о ASP.Net Core и MVC, чтобы знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...