导航逻辑应该在控制器还是视图中?

Cha*_*ler 5 model-view-controller

在 MVC Web 应用程序中,放置代码/逻辑以显示指向“下一页”导航控件、控制器或视图的 url 链接的“正确”位置在哪里?如果我把它放在视图中,我不仅要向视图传递要显示在当前页面上的数据,还要传递与下一页相关的数据,也就是下一页的页面 ID。如果我把它放在控制器中,控制器必须知道特定视图将要显示的导航。对我来说,这两种方法都不是很优雅。还有其他方法吗?

D.S*_*ley 1

我不知道是否真的有“正确”的方法来做到这一点。不过,我会考虑以下一些不同的方式:

  • 如果一个项目页面本身就是系统中的一个对象,那么控制器就有意义
  • 如果页面只存在于视图逻辑中,那么视图就有意义
  • 如果视图接收整个列表,则分页是一个表示概念
  • 如果您预见到需要不同的页面大小或组织,则将逻辑保留在控制器之外

我的直觉告诉你,你应该努力将所有分页逻辑保留在视图中。这通常意味着您需要某种方法来基于视图中的当前页面来计算下一页的内容,或者使控制器对结果集中的起点有一些概念。我通常采用后者 - 视图使用可选起点(即上一页上最​​后一项的 ID)检索数据。这样,分页逻辑就在视图中,数据检索也很简单。

需要注意的事情之一是,如果您键入的项目不再存在,您将如何处理检索下一页数据。换句话说,如果你的链接说“项目A后面的第一页”并且“项目A”已被删除,那么你需要做一些合理的事情。