返回 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 采用的第二个参数不是模型,而是路由。这就是为什么你在_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
物体的问题和头痛。!