哪个是临时保存和访问另一个控制器之间的数据收集的最佳方法?
例如,view1.cshtml
包含一个包含以下数据项的网格:
--------------------
Name | Address | Age
--------------------
aa | ad1 | 11
--------------------
bb | ad2 | 22
-------------------
cc | ad3 | 33
--------------------
如果用户选择了前两行,则所选行项需要在另一个名为view2.cshtml
的另一个视图的网格中显示。用户可以再次返回第一个视图,如果选择一个新的行项目,那么我想将所选项目也附加到第二个视图上显示的网格。
我已尝试使用ViewBag和TempData临时存储数据。但不幸的是,数据有时会被清除。哪个是解决这种情况的最佳选择?
答案 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>;