我有一个asp.net mvc4应用程序,其中我有一个动作X
:
impaire_target = u.Get_Impaire_List().Find(x => x.id_paire == identificateur);
Session["id_paire"] = a;
return RedirectToAction("Page2","Pages",impaire_target );
行动Page2
public ActionResult Page2(Impaire impa)
{
try
{
User u = (User)Session["user"];
if (u.Login == null) RedirectToAction("Index", "Home");
}
catch { return RedirectToAction("Index", "Home"); }
if (impa == null)
{
return View();
}
return View(impa);
}
问题是参数impa
始终为空。即使我尝试将return RedirectToAction("Page2","Pages",impaire_target );
替换为return RedirectToAction("Page2","Pages",new{ impa=impaire_target} );
,我也得到了相同的结果。
这个问题的原因是什么?
答案 0 :(得分:3)
您不能将ModelBinding与RedirectToAction
一起使用,因此没有复杂类型作为匿名对象。尝试将对象转换为RouteValueDictionary
:
return RedirectToAction("Page2", "Pages", new RouteValueDictionary(impaire_target));
附注:您必须返回 RedirectToAction
,否则无效。
答案 1 :(得分:1)
您应该使用Session或TempData在控制器操作之间传递复杂数据。 Here详细介绍了它。
示例:
impaire_target = u.Get_Impaire_List().Find(x => x.id_paire == identificateur);
TempData["impa"] = impaire_target;
Session["id_paire"] = a;
return RedirectToAction("Page2","Pages");
行动Page2
public ActionResult Page2()
{
Impaire impa = TempData["impa"] as Impaire;
try
{
User u = (User)Session["user"];
if (u.Login == null) RedirectToAction("Index", "Home");
}
catch { return RedirectToAction("Index", "Home"); }
if (impa == null)
{
return View();
}
return View(impa);
}