asp.net mvc-在2个控制器MVC5之间发送数据



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

  1. 使用tempdata
  2. 使用会话

但以上所有这些都不适合这种情况,有人能告诉我解决我问题的其他方法吗。感谢

更好的选择是在第二个控制器中再次检索列表。这通常是相当便宜和快速。

我就是这么做的。对于我可能在几个地方重复使用的列表之类的东西,我在每个控制器中使用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;
    }
}

显然,检索列表的代码可能会因您访问数据库的方式而异,但您已经明白了。这样,你只在每个控制器的代码中的一个地方调用,是的,这可能会导致更多的数据库调用,但对我来说,我喜欢在我的操作中不到处都是调用的整洁。MyListViewBag中可用于填充表单控件或在需要的地方输出,或者用于视图内逻辑(如果您有这种倾向的话(。

随着应用程序的发展,将有许多请求需要向数据库发出请求,不要担心对数据库的此类调用。

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

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

  2. 您将其以json形式存储在页面中,然后将其发布到服务器并将其传递给第二个控制器,但数据可以在客户端上进行操作,还增加了带宽,使页面下载和上传速度变慢。

  3. 变得难以维护。

简而言之,从第二个控制器的数据库中检索它。

最新更新