临时持有数据收集

时间:2014-03-17 17:10:23

标签: c# asp.net-mvc asp.net-mvc-4 razor

哪个是临时保存和访问另一个控制器之间的数据收集的最佳方法?

例如,view1.cshtml包含一个包含以下数据项的网格:

--------------------
Name | Address | Age
--------------------
aa   | ad1     | 11
--------------------
bb   | ad2     | 22
-------------------
cc   | ad3     | 33
--------------------

如果用户选择了前两行,则所选行项需要在另一个名为view2.cshtml的另一个视图的网格中显示。用户可以再次返回第一个视图,如果选择一个新的行项目,那么我想将所选项目也附加到第二个视图上显示的网格。

我已尝试使用ViewBag和TempData临时存储数据。但不幸的是,数据有时会被清除。哪个是解决这种情况的最佳选择?

3 个答案:

答案 0 :(得分:2)

由于网格上的信息来自某些数据源,很可能是具有唯一标识符的数据库,当用户点击行时,我只需将用户重定向到另一个页面并传递所选的ID行。

在另一个控制器上,您只需检索传入的ID的数据。

答案 1 :(得分:2)

一种方法是在这样的动作中传递你的对象:

return RedirectToAction("ActionName", new { data= items });

控制器操作方法签名可能类似于:

public ActionResult LoginFailed(List<T> items)
{
    ...
}

另一种方法是将它存储在这样的tempdata中,并且一旦读取,它就会自动销毁:

List<AnyType> items = new List<AnyType>();


TempData["MyList"] = items;

在其他控制器操作中,请按以下方式阅读:

List<AnyType> items = (List<AnyType>)TempData["MyList"];

如果您希望在阅读后可以访问它:

TempData.Keep("MyList");

答案 2 :(得分:-1)

我会使用Session来存储数据集合,因为您需要在一个或多个控制器之间传递数据。

保存:

List<T> items = new List<T>();
items.Add(T);
...

Session["YourCollection"] = items;

得到:

List<T> items = Session["YourCollection"] as List<T>;