获取一个null参数

时间:2013-10-08 19:58:57

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我有一个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} );,我也得到了相同的结果。

这个问题的原因是什么?

2 个答案:

答案 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);
    }