返回 RedirectToAction() 不传递对象

本文关键字:对象 RedirectToAction 返回 | 更新日期: 2023-09-27 18:36:04

我在 ASP.NET MVC4应用程序中有两个部分视图-

[HttpGet]
public ActionResult Autocomplete_Search(string accountHead, List<LedgerModel> ledge)
{
    if (!String.IsNullOrEmpty(accountHead)) {
        ledge = (from u in db.LedgerTables
                 where u.AccountHead.Contains(accountHead) && u.FKRegisteredRecord == this.LoggedInUser.RegisterID
                 select new LedgerModel {
                     AccID = u.AccID,
                     Place = u.Place,
                     AccountHead = u.AccountHead,
                     DateAccountHead = Convert.ToDateTime(u.DateAccountHead) != null ? Convert.ToDateTime(u.DateAccountHead) : DateTime.Now
                 }).ToList();
        return RedirectToAction("_ProductSearchList", ledge);
    }
    return View();
    //return Json(ledge, JsonRequestBehavior.AllowGet);
}

和-

public ActionResult _ProductSearchList(List<LedgerModel> ledge) {
            List<LedgerModel> ledger = null;
            if (ledge != null) {
                ledger = (from u in ledge
                         select new LedgerModel {
                             AccID = u.AccID,
                             Place = u.Place,
                             AccountHead = u.AccountHead,
                             DateAccountHead = Convert.ToDateTime(u.DateAccountHead) != null ? Convert.ToDateTime(u.DateAccountHead) : DateTime.Now
                         }).ToList();
                return PartialView(ledge);
            }
            else {
                return PartialView(ledge);
            }
        }

好的,现在当我通过文本框发送字符串时,将调用操作AutoComplete_Search。在重定向到另一个名为_ProductSearchList的方法时,我正在将 listType 的对象ledge发送到此方法。但它说ledge _ProductSearchList操作的参数为空。

但是,此对象是列表类型并包含记录。如何获取重定向到操作_ProductSearchList ledge的对象?

返回 RedirectToAction() 不传递对象

RedirectToAction 采用的第二个参数不是模型,而是路由。这就是为什么你在_ProductSearchList行动中没有得到你所期望的。

我不太确定这样的事情会起作用,因为我不知道如何在 url 中序列化复杂对象列表(或者即使这是重新推荐的),但这是预期的:

return RedirectToAction("_ProductSearchList", new { ledge = ledge });

要传递您的列表,您有 TempData 选项(引用自 MSDN):

操作方法可以将数据存储在控制器的 TempDataDictionary 中 对象在调用控制器的重定向到操作方法之前 调用下一个操作。属性值存储在 会话状态。在 设置临时数据字典值可以从对象和 然后处理或显示它们。TempData 的值将一直持续到它 或直到会话超时。在此中保留临时数据 way 启用重定向等方案,因为 TempData 在单个请求之外可用。

不要忘记在使用 MVC 中使用 Tempdata ASP.NET - 最佳实践。

首先,

您无法在 Autocomplete_Search 中获取请求中的列表壁架。

不能在重定向中传递复杂对象。只能传递简单的标量值。

在此线程中检查答案:

在使用重定向操作和 prg 模式的操作之间发送数据

感谢大家在这个问题上抽出时间。

正如@Damian S所描述的那样,complex object redirecting对我来说是值得注意的建议。

但是,我能够找到解决此问题的最简单解决方案,以便在C#中使用DataDictionary

我通过使用TempData[]以最简单的方式存储详细信息来管理它,因为它是最精确和琐碎的技术。

使用TempData[]

在 TempData[] 中存储记录 AutoComplete_Search() controller -

TempData["Records"]= ledge;

ProductSearchList控制器中的用法

List<ledgerModel> ledge= (List<ledgerModel>)TempData["Records"];

解决了我玩methods methods物体的问题和头痛。!