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"]不是持久数据?
您正在尝试进行双重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