0

我的 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会调用 Action。在重定向到另一个名为_ProductSearchList我的方法时,我将ledgelistType 的对象发送到此方法。但它在动作的参数ledge中显示为空。_ProductSearchList

然而,这个对象是一个列表类型并且包含记录。如何获取ledge重定向到 action 的这个对象_ProductSearchList

4

3 回答 3

3

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

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

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

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

动作方法可以在调用控制器的 RedirectToAction 方法调用下一个动作之前将数据存储在控制器的 TempDataDictionary 对象中。TempData 属性值存储在会话状态中。在设置 TempDataDictionary 值之后调用的任何操作方法都可以从对象中获取值,然后处理或显示它们。TempData 的值会一直存在,直到它被读取或会话超时。以这种方式持久化 TempData 可以实现重定向等场景,因为 TempData 中的值在单个请求之外可用。

不要忘记查看Using Tempdata in ASP.NET MVC - Best practice before using it。

于 2013-10-20T18:53:31.010 回答
1

首先,您无法在 Autocomplete_Search 的获取请求中获取 List ledge。

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

检查此线程中的答案:

使用 redirectAction 和 prg 模式在动作之间发送数据

于 2013-10-20T18:56:46.230 回答
0

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

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

但是我能够找到最简单的解决方案来解决这个问题DataDictionaryC#

TempData[]我想用最简单的方式存储细节来管理它,因为它是最精确和最简单的技术。

使用TempData[]

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

TempData["Records"]= ledge;

ProductSearchList控制器中的使用

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

解决了我玩物体的问题和头痛methodsmethods

于 2013-10-20T19:08:11.513 回答