Я все еще изучаю ядро 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, чтобы знать.