我仍在学习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不够了解。