【发布时间】:2017-12-16 02:45:12
【问题描述】:
我对将数据从一个 ActionResult 传递到另一个 ActionResult 方法感到困惑。
让我来描述一下这是什么,
我需要将值从一种方法传递给另一种方法,并且该值必须在我从该另一种方法呈现的视图中可用。
我在我的项目中看到的是这个(这是编辑,但 [HttpPost] 编辑,它也重定向到编辑,但使用 [HttpGet] 插入 [HttpPost]):
TempData["Success"] = True;
return RedirectToAction("Edit/" + customer.Id, "Customer");
然后做了什么 [HttpGet] 编辑:
if (TempData["Success"] != null && TempData.ContainsKey("Success"))
ViewBag.Success = Convert.ToString(TempData["Success"]);
return View(model);
正如您在 [HttpPost] 上看到的,TempData["Success"] 设置为 True;
并重定向到 [HttpGet] 方法,并编写下一个代码:
if (TempData["Success"] != null && TempData.ContainsKey("Success"))
ViewBag.Success = Convert.ToString(TempData["Success"]);
return View(model);
所以我想知道为什么需要设置TempData,然后根据TempDate 的值将值设置为ViewBag,我不能在重定向之前在我的第一个ActionResult 上设置ViewBag 的值吗?即使从HttpGet 操作结果渲染/调用视图,它也可以在视图上使用?
例如:
而不是这个:
TempData["Success"] = True;
return RedirectToAction("Edit/" + customer.Id, "Customer");
我可以简单地写在我的HttpPost
ViewBag.Success = True;
return RedirectToAction("Edit/" + customer.Id, "Customer");
或者这需要使用TempData 来完成,因为如果我不在重定向到视图的ActionResult 上设置值,ViewBag 在视图上将不可用,在这种情况下它是 HttpGet 而不是 HttpPost(这意味着我需要在 HttpGet 上设置 ViewBag 值?)
如果我必须这样做,我还可以使用两个 ViewBag,而不是 ViewBag 和 TempData?
为什么有人会这样解决它?这是正确的方法还是什么?
【问题讨论】:
-
似乎只使用路由值比使用任何类型的包或临时数据更好。您不想对敏感信息执行此操作,但这并不敏感。我也会使用视图模型而不是 viewbag,但这是我的意见。
-
@ps2goat 我只是想知道为什么这样做(在操作结果之间发送数据),使用这个 TempData,是好方法,坏方法还是其他方法,可能有更好的方法或其他方法。 .
-
有一篇很棒的文章:When to use ViewBag, ViewData, and TempData 在文章中你会发现它解释了 ViewData 和 ViewBag 在控制器重定向时被重置为 Null,因此,TempData 是要走的路。但是,我同意 ps2goat 并将模型传递到下一个视图将是解决此问题的正确方法。
-
@RyanCarlisle 基本上这就是为什么使用 tempData 的原因,因为如果我重定向到另一种方法,ViewData 和 ViewBag 将被重置为 Null。谢谢伙计
标签: c# asp.net asp.net-mvc actionresult