我的问题:我从控制器a的数据库中选择了一个列表a,控制器a会显示列表a。在视图中,列表a的每条记录都有一个链接调用控制器B(@html.ActionLink("text","actionB","controllerB", new {id=listA.ID})
(,我也想将列表a发送给控制器B。我已经搜索了如何在2个控制器之间发送数据,有两种方式:
- 使用tempdata
- 使用会话
但以上所有这些都不适合这种情况,有人能告诉我解决我问题的其他方法吗。感谢
更好的选择是在第二个控制器中再次检索列表。这通常是相当便宜和快速。
我就是这么做的。对于我可能在几个地方重复使用的列表之类的东西,我在每个控制器中使用Initialize
方法,然后检查Action
名称以确定我需要加载哪些对象列表。
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
//if this is the insert or edit form - get the lists for the d.down form inputs
var actionName = requestContext.RouteData.Values["action"].ToString().ToLower();
if (actionName == "insert" || actionName == "edit")
{
var _uow = new UnitOfWork();
var lstMyList = _uow.MyRepository.Get().OrderBy(n => n.title).ToList();
_uow.Dispose();
ViewBag.MyList = lstMyList;
}
}
显然,检索列表的代码可能会因您访问数据库的方式而异,但您已经明白了。这样,你只在每个控制器的代码中的一个地方调用,是的,这可能会导致更多的数据库调用,但对我来说,我喜欢在我的操作中不到处都是调用的整洁。MyList
在ViewBag
中可用于填充表单控件或在需要的地方输出,或者用于视图内逻辑(如果您有这种倾向的话(。
随着应用程序的发展,将有许多请求需要向数据库发出请求,不要担心对数据库的此类调用。
然而,要回答你的问题。。。
-
你可以将它存储在session/tempdata中,然后检索它。这将增加你的服务器内存使用量,如果用户不必查看详细信息怎么办。这只是浪费。
-
您将其以json形式存储在页面中,然后将其发布到服务器并将其传递给第二个控制器,但数据可以在客户端上进行操作,还增加了带宽,使页面下载和上传速度变慢。
-
变得难以维护。
简而言之,从第二个控制器的数据库中检索它。