将数据传递给另一个 controller/model

Passing data to a different controller/model

总的来说,我对 MVC 还很陌生,所以这听起来可能很傻。但是,我不太了解如何在以下情况下连接我的数据:

我正在创建一个基本上有两个表的项目

Table 1

pid  |  pname  |  etc

Table 2

id  |  pid  |  etc

现在,我已经成功地实现了一个控制器,在该控制器中,我使用 "date range" 作为参数,用 table 1 中的数据填充了一个列表。

URL 1

/table1object?search=Search&endDate=2015-02-20&fromDate=2015-02-20

如表所示,此 view 中的每一行都连接到 table 2 中的特定行。因此,为此我生成了一个 link,它基本上通过循环当前 model.

将我发送到第二个控制器的详细信息
@Html.ActionLink("Details", "Details/" + @result.pId, "table2Object", null)

现在,我的 2 号控制器(详细信息)只接受 id 来显示 Table 2 的特定信息。

URL 2

/table2object/Details/96

问题

因为我只传递这个 id 来访问第二个控制器,所以我一次只能看到一个项目。如果我想添加一个 previousnext 按钮来浏览第二个控制器中的项目,但在第一个控制器中建立的范围内怎么办?我该怎么做?

谢谢

第一种不尊重任何最佳实践的方法是将搜索结果 (Controller1) 保存在 Session 变量中。

Session["CurrentResult"] = YourViewModelInController1 ; 

然后在控制器 2 中

ActionResult Details(int id) 
{
   var prevViewModel = Session["CurrentResult"] ; 

   // Do what you want to find the prev and the next from prevViewModel
}

当然,如果您在不显示 table1 的情况下访问您的 DetailController,您将无法获得下一个和上一个。 而且,还会有很多副作用。例如:当用户一次进行 2 次搜索时,..


第二种正确的方法是重新执行搜索以在 Controller 2 Details 上找到上一个和下一个。独立于前

ActionResult Details(int id) 
{
   // Do a real search to find the next and the previous
}

考虑到你知道如何在控制器中传递值和工作,我可以给你一个建议如下:

您可以先在给定的日期范围内将您的项目加载到列表中。将该列表传递给第二个控制器然后通过使用计数器单击上一个和下一个来遍历该列表。

希望这对您有所帮助, 谢谢