【发布时间】:2017-02-19 05:30:08
【问题描述】:
基本上我正在了解 ViewBag、ViewData、TempData 在实践中的区别。我对这些概念的理论感到困惑,所以我想看看实际情况如何。
我了解到 TempData 用于将数据从控制器发送到控制器,即从一个操作方法到另一个操作方法,并且它是短暂的。即使这样我也可以将 TempData 值传递给视图。当我读到它的值在后续请求后变为空时。但是在我的示例代码 sn-p 中,虽然重定向后 TempData 中存在一个值,但我无法将其分配给变量。
public ActionResult Index()
{
var featuredProduct = new Product
{
Name = "Special cupcakes",
Des = "Delectable vanilla and chocolate cupcakes",
Creationdate= DateTime.Now,
Expirydate= DateTime.Today.AddDays(7)
};
ViewData["FeaturedProduct"] = featuredProduct;
ViewBag.product = featuredProduct;
TempData["FeaturedProduct"] = featuredProduct;
return Redirect("~/Home/Show");
}
由于这是第一次重定向,即设置 TempData 后的下一个后续请求,因此该值应保留在 Show Action 方法的 TempData 中。
public ActionResult Show()
{
var testdata= ViewData["FeaturedProduct"];
var testbag = ViewBag.product;
var tempdata = TempData["FeaturedProduct"];
return View();
}
现在我的困惑就在这里。如果我想在 Show View 中访问 TempData,我希望它应该为 null。当我在 Quick Watch 中看到时,它的值保持不变并且它的值没有分配给变量。那么 TempData 到底发生了什么。
@{
var tevar = TempData["Featured Product"] as Product;
}
@{
if (TempData["Featured Product"]!=null)
{
<b><u>
@tevar.Name
</u></b>
}
else{
<b> Sorry tempdata values perished</b>
}
}
虽然这看起来很基本,但请耐心等待并解释我的代码中 TempData 发生了什么。 谢谢。
【问题讨论】:
-
为什么您认为
TempData在 Show 视图中将为空?如果您重新加载 Show 操作或重定向离开它,它将为 null。 -
@DarinDimitrov 所以如果它不为 null 那么为什么 TempData 值没有被分配给 View 中的 tevar 变量?
标签: asp.net-mvc redirect tempdata