带有模型和列表属性的RedirectToAction

时间:2015-07-18 07:43:03

标签: asp.net-mvc-4

我有2个视图,模型为Account。从第一个视图开始,我使用RedirectToAction来查看两个并发送模型对象,如下所示:

    [HttpPost]
    public ActionResult Login(Account account)
    {
           //Some code here
            return RedirectToAction("Index", "AccountDetail", account);
    }

AccountDetail控制器如下所示:

 public ActionResult Index(Account account)
    {
        return View("ViewNameHere", account);
    }

模型对象包含如下属性:

 public class Account
 {
 // Some code here
 public List<Details> Details{
 get;
 set;
 }

在第一个控制器中,在拨打RedirectToAction之前,详细信息中有一项。但是,在第二个控制器的Index方法中,没有任何内容。

有人可以帮助指出这里的缺陷吗?由于我是MVC的初学者,似乎无法弄明白。

1 个答案:

答案 0 :(得分:1)

您不应将复杂对象传递给GET方法。除了它将创建的丑陋URL之外,您可以轻松地超出查询字符串限制并抛出异常。

在任何情况下,您都无法使用BodyDef将集合(或包含集合的复杂对象)传递给GET方法。在内部,该方法使用反射通过调用模型的每个属性的RedirectToAction()方法来生成查询字符串,在您的集合属性的情况下,该方法将类似于.ToString()

调用../AccountDetail/Index?Details=System.Collections.Generic.List<Details>方法时,会初始化Index()的新实例,并尝试将其属性Account的值设置为字符串Details,失败,结果是属性System.Collections.Generic.List<Details>Details

选项包括传递标识符并从存储库或nullSession

获取集合