我的问题:我有一个从控制器A的数据库中选择的列表A,控制器A将显示列表A.在视图中,列表A的每个记录都有一个链接调用控制器B(@html.ActionLink("text","actionB","controllerB", new {id=listA.ID})
),我想要也将列表A发送给控制器B.我搜索了如何在2个控制器之间发送数据,有2种方式:
但是所有这些都不适合这种情况,任何人都可以告诉我其他方法来解决我的问题。谢谢
答案 0 :(得分:0)
更好的选择是在第二个控制器中再次检索列表。这通常非常便宜和快速。
答案 1 :(得分:0)
这就是我的工作。对于像列表这样的东西,我可以在几个地方重用,我在每个控制器中使用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
来填充表单控件或输出所需的内容或视图逻辑(如果您倾向于这样)。
答案 2 :(得分:0)
随着应用程序的增长,您将需要向db发出请求的许多请求,不要担心对db的此类调用。
然而,要回答你的问题......
您可以将其存储在session / tempdata中,然后将其检索。这将增加您的服务器内存使用量,如果用户不必查看详细信息,该怎么办。这只是一种浪费。
您将它作为json存储在自己的页面中,然后将其发布到服务器并将其传递给第二个控制器,但是数据可以在客户端上操作并且还会增加带宽,使页面变慢下载并上传。
变得难以维护。
简而言之,从第二个控制器的db中检索它。