[英]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 变量吗? 有什么方法可以持久保存这些数据,而无需每次都调用数据库?
您可以使用ViewData
或TempData
将变量从一个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.