Peek不能在MVC 4中工作

本文关键字:工作 MVC 不能 Peek | 更新日期: 2023-09-27 18:20:09

我们创建了一个示例自定义类"Customer"。

public class Customer
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string Addresss { get; set; }
}

我们存储在TempData中。

public ActionResult Index()
{  
  Customer customer = new Customer()
  {
    FirstName = "FirstName",
    LastName = "LastName",
    Addresss = "Address"
   };
   TempData["Customer"] = customer;
   return RedirectToAction("About");
 }

重定向到另一个操作方法并呈现"About"的视图。

 public ActionResult About()
 {
   Customer customer = new Customer();
   if (TempData["Customer"] != null)
   {
    customer = TempData.Peek("Customer") as Customer;
   }    
   return View();
  }

在视图中,有一个链接按钮是"联系"。当我们点击这个按钮,就会进入动作方法"联系"。

public ActionResult Contact()
{
 Customer customer = new Customer();
 if (TempData["Customer"] != null)
 {
  customer = TempData["Customer"] as Customer;
 }   
 return View();
}

但在这种情况下,TempData["Customer"]为null。当我们使用peek时,为什么TempData["Customer"]不是持久数据?

Peek不能在MVC 4中工作

您正在尝试进行双重TeamData读取。

我想这将是在不预读/检查值的情况下进行Peek的正确方法。

public ActionResult Contact()
{
   Customer customer = TempData.Peek("Customer") as Customer;
   if (customer == null)
   {
      customer = new Customer();
   }   
   return View();
}

您正在读取if语句条件中的"Customer"值。因此,一旦读取该值,它就会被销毁。因此,它将在第二次读取TempData.Peek("客户")时返回null。

Customer customer  = (Customer)TempData["Customer"];
if (customer != null)
{
    //Do your work.
} 

TempData在HTTP请求时保留信息。这意味着只能从一页到另一页因为当你点击联系人动作链接时,你正在第二次重定向,tempdata字典的生命就结束了参考:TempData