在ASP.Net Core MVC中的请求之间传递复杂对象的最佳方法

时间:2019-04-29 17:45:45

标签: c# asp.net-mvc asp.net-core

我仍在学习asp.net核心,需要知道我是否要以正确的方式解决这个问题。在我的应用程序中,我有一个页面充当创建复杂对象的向导。我正在使用视图模型来控制输入。视图模型的简要概述是:

  

主要对象

     

-2个子对象(每个对象包含3个子对象)

     

第二个子对象(包含1个子对象)

我已经可以创建主对象和所有子对象,而没有任何问题。下一步是为2个子对象添加搜索选项。

当前,我有一个指向子对象搜索页面的链接,我正在使用TempData传递回所选对象的ID(因为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不够了解。

0 个答案:

没有答案