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

时间:2009-09-07 01:37:14

标签: model-view-controller

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

2 个答案:

答案 0 :(得分:1)

控制器应提供有关正在显示的数据的元信息:页数和当前页面索引是两个,可以在此处获得所需内容。导航控件应该封装逻辑,给定这两条信息,可以渲染剩下的信息。

答案 1 :(得分:1)

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

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

我的直觉说你应该非常努力地保持视图中的所有分页逻辑。这通常意味着您需要某种方式来计算下一页基于视图中当前页面的内容,或者让控制器在结果集中具有一些起点概念。我通常使用后者 - 视图使用可选的起始点检索数据,该起始点是上一页上最​​后一项的ID。这样,分页逻辑就在视图中,数据检索很简单。

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