我的ASP.NET MVC4应用程序中有两个partialView -
[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);
}
}
好的,现在当我通过文本框发送字符串时,会调用Action AutoComplete_Search
。在重定向到名为_ProductSearchList
的另一个方法时,我将listType的对象ledge
发送到此方法。但它在ledge
操作参数中显示_ProductSearchList
null。
但是,此对象是列表类型并包含记录。如何将此对象ledge
重定向到操作_ProductSearchList
?
答案 0 :(得分:3)
RedirectToAction采用的第二个参数不是模型,而是路径。
这就是为什么你在_ProductSearchList
行动中没有收到你期望的结果。
我不太确定这样的东西会起作用,因为我不知道如何在网址中序列化复杂对象列表(或者即使这是推荐的),但这是预期的:
return RedirectToAction("_ProductSearchList", new { ledge = ledge });
要传递列表,您有TempData选项(来自MSDN的引用):
动作方法可以将数据存储在控制器的TempDataDictionary中 对象在调用控制器的RedirectToAction方法之前 调用下一个动作。 TempData属性值存储在 会话状态。在之后调用的任何操作方法 设置TempDataDictionary值可以从对象中获取值 然后处理或显示它们。 TempData的值一直持续到它为止 被读取或直到会话超时。在此持久保存TempData 方式启用重定向等方案,因为中的值 TempData可以在单个请求之外使用。
在使用之前,请不要忘记查看Using Tempdata in ASP.NET MVC - Best practice。
答案 1 :(得分:1)
在第一个中,您无法在Autocomplete_Search中获取请求中的List ledge。
您无法在重定向时传递复杂对象。您只能传递一个简单的标量值。
在这个帖子中检查答案:
send data between actions with redirectAction and prg pattern
答案 2 :(得分:0)
感谢所有人在这个问题上给予时间。
正如@Damian S所描述的complex object redirecting
对我来说是值得注意的建议。
但是,我能够找到最简单的解决方案,以便在DataDictionary
中使用C#
。
我使用TempData[]
来管理它,以最简单的方式存储细节,因为它是最精确和最简单的技术。
使用TempData[]
在AutoComplete_Search() controller
-
TempData["Records"]= ledge;
ProductSearchList
控制器
List<ledgerModel> ledge= (List<ledgerModel>)TempData["Records"];
解决了我使用methods
到methods
对象的问题和头痛。