【问题标题】:RedirectToAction with model and List properties具有模型和列表属性的 RedirectToAction
【发布时间】:2015-07-18 15:56:28
【问题描述】:

我有 2 个视图,模型作为帐户。从视图一,我使用 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 之前,Details 中有一个项目。但是,在第二个控制器的 Index 方法中,什么都没有。

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

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

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

    在任何情况下,您都不能使用RedirectToAction() 将集合(或包含集合的复杂对象)传递给 GET 方法。在内部,该方法使用反射通过调用模型的每个属性的.ToString() 方法来生成查询字符串,对于您的集合属性,该方法类似于../AccountDetail/Index?Details=System.Collections.Generic.List&lt;Details&gt;

    当调用Index() 方法时,会初始化Account 的新实例,并尝试将其属性Details 的值设置为字符串System.Collections.Generic.List&lt;Details&gt;,但失败了,结果是属性@ 987654328@ 是null

    选项包括传递标识符并从存储库或SessionTempData 获取集合

    【讨论】:

    • 完美。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多