【发布时间】:2014-11-19 17:32:57
【问题描述】:
我有这个方法:
[HttpPost]
public async Task<ActionResult> AddBookingCreditCard(TripViewModel model)
{
if (ModelState.IsValid)
{
// do nothing right now
}
TempData["ccInfo"] = model.CcInfo;
return RedirectToAction("Book", new{ id = model.Trip.TripId, travellers = model.Travellers});
}
在这种情况下,model.CcInfo 确实存在并且包含一个 CcInfo 类型的对象。在 RedirectToAction 之后调用这个方法:
[HttpGet]
public async Task<ActionResult> Book(int id, int travellers)
{
var vm = new TripViewModel();
vm.Travellers = travellers;
if (TempData["ccInfo"] != null)
vm.CcInfo = TempData["ccInfo"] as CcInfo;
// lot of code
return View("Index", vm);
}
if 语句总是失败:TempDate["ccInfo"] 为空,而它应该包含我的对象。
我做错了什么?
编辑: CcInfo 类:
public class CcInfo
{
[Display(Name = "Name on Card"), Required]
public string CcName { get; set; }
[Display(Name = "Card Number"), DataType(DataType.CreditCard), Required]
public int CcNumber { get; set; }
[Display(Name = "Card CVV"), Required, Range(100, 999)]
public int CcCheck { get; set; }
}
【问题讨论】:
-
这两种方法是否在同一个控制器中??
-
你的会话状态提供者是什么? TempData 依赖于 Session。
-
呃,不知道,所以我想我正在使用默认值..
-
好的。 'TempData' 主要用于在两个不同的控制器之间传递数据。您可以将值放入 Session["ccInfo"] 以查看该值是否在两种方法中都持续存在...
-
当您将
model.CcInfo添加到TempData时,您是否检查过model.CcInfo的值实际上不为空?
标签: c# asp.net-mvc-3 asp.net-mvc-4