可以将TempData值分配给mvc 4中View中的变量

时间:2017-02-19 05:30:08

标签: asp.net-mvc redirect tempdata

基本上我在实践中了解ViewBag,ViewData,TempData之间的区别。我对这些概念的理论感到困惑,所以我想看看实际情况是如何发生的。

我了解到TempData用于将数据从控制器发送到控制器,即从一个动作方法到另一个动作方法,并且它是短暂的。即便如此,我也可以将TempData值传递给View。正如我读到的那样,在后续请求之后它的值变为空。但是在我的示例代码片段中,虽然重定向后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发生了什么。 谢谢。

2 个答案:

答案 0 :(得分:1)

您在summary(ttest)视图中输入了错字:

t.test

当然应该是:

Show

确保使用与存储时相同的密钥来访问该值。

答案 1 :(得分:0)

我现在可以清楚地理解ViewBag,ViewData,TempData之间的区别。 重定向后ViewBag和ViewData值将丢失,但TempData值将保留在重定向之间,直到刷新当前操作方法或导航到其他操作方法。