繁体   English   中英

如何返回 model 以查看需要 .net 核心 MVC 中的 ViewData?

[英]How to return model to view that requires ViewData in .net core MVC?

我有 .net 核心 mvc 应用程序,它在 controller 后有两种操作方法。

[HttpGet]
public async Task<IActionResult> Create()
{
  var hostAppGetQuery = new Application.Handlers.HostApps.Queries.List.Query();
  var platformGetQuery = new Application.Handlers.Platforms.Queries.List.Query();

  var hostApps = await _mediator.Send(hostAppGetQuery);
  var platforms = await _mediator.Send(platformGetQuery);

  ViewBag.hostApps = ((Application.Handlers.HostApps.Queries.List.Response) hostApps).Items;
  ViewBag.platforms = ((Application.Handlers.Platforms.Queries.List.Response) platforms).Items;

  return View();
}

上面是 get 方法,它有两个ViewBag变量。

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Models.InputModels.Posts.Create.Index model)
{
   if (!ModelState.IsValid)
   {
     return View(model);
   }

   var command = _mapper.Map<Application.Handlers.Posts.Commands.Create.Command>(model);

   var result = await _mediator.Send(command);

    return View();
}

以上是创建帖子的帖子方法。 我在这里遇到错误,因为没有在后期操作中返回 viewbag 变量。 但我在这里有点困惑。 每次调用 post 方法时我都需要获取和设置 viewbag 变量吗? 有什么方法可以持久保存这些数据,而无需每次都调用数据库?

您可以使用ViewDataTempData将变量从一个Controller操作保存到另一个操作。 当您想将值返回给您的View时,您将使用ViewBag 如果您想为更多请求保留 TempData 值,您可以使用 Peek 和 Keep 函数。 这个答案可以更深入地了解这些功能。 在您的情况下,您可以执行以下操作:

[HttpGet]
public async Task<IActionResult> Create()
{
  var hostAppGetQuery = new Application.Handlers.HostApps.Queries.List.Query();
  var platformGetQuery = new Application.Handlers.Platforms.Queries.List.Query();

  var hostApps = await _mediator.Send(hostAppGetQuery);
  var platforms = await _mediator.Send(platformGetQuery);

  TempData["hostApps"] = ((Application.Handlers.HostApps.Queries.List.Response) hostApps).Items;
  TempData["platforms"] = ((Application.Handlers.Platforms.Queries.List.Response) platforms).Items;

  return View();
}

你的post方法看起来像:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Models.InputModels.Posts.Create.Index model)
{
   if (!ModelState.IsValid)
   {
     return View(model);
   }

   var command = _mapper.Map<Application.Handlers.Posts.Commands.Create.Command>(model);

   var result = await _mediator.Send(command);

   //Get your ViewData variables here
   if (TempData["hostApps"] != null)
   {
    var hostAppsResult = (((Application.Handlers.HostApps.Queries.List.Response) hostApps).Items) TempData["hostApps"];
        ...
   }

   //Get your ViewData variables here
   if (TempData["platforms"] != null)
   {
    var platformsResult = (((Application.Handlers.Platforms.Queries.List.Response) platforms).Items) TempData["platforms"];
        ...
   }

    return View();
}

您可以在本文中阅读有关此主题的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM