我有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的初学者,似乎无法弄明白。
答案 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
。
选项包括传递标识符并从存储库或null
或Session