在2个控制器MVC5之间发送数据

时间:2015-07-07 03:03:09

标签: asp.net-mvc asp.net-mvc-5

我的问题:我有一个从控制器A的数据库中选择的列表A,控制器A将显示列表A.在视图中,列表A的每个记录都有一个链接调用控制器B(@html.ActionLink("text","actionB","controllerB", new {id=listA.ID})),我想要也将列表A发送给控制器B.我搜索了如何在2个控制器之间发送数据,有2种方式:

  1. 使用tempdata
  2. 使用会话
  3. 但是所有这些都不适合这种情况,任何人都可以告诉我其他方法来解决我的问题。谢谢

3 个答案:

答案 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的此类调用。

然而,要回答你的问题......

  1. 您可以将其存储在session / tempdata中,然后将其检索。这将增加您的服务器内存使用量,如果用户不必查看详细信息,该怎么办。这只是一种浪费。

  2. 您将它作为json存储在自己的页面中,然后将其发布到服务器并将其传递给第二个控制器,但是数据可以在客户端上操作并且还会增加带宽,使页面变慢下载并上传。

  3. 变得难以维护。

  4. 简而言之,从第二个控制器的db中检索它。