【发布时间】:2015-04-02 22:40:28
【问题描述】:
我有一个 MyObject 类型的 List,MyObject 的一个属性是 Order。
这用于设置我在视图中输出对象数据时的优先顺序。
例如
@foreach(var item in Model.GroupOfMyObjects)
{
@* // output some HTML *@
}
我的问题是……这个列表的排序(按顺序)应该在 Action 中完成(在构建 ViewModel 以发送到 View 时)还是应该在 View 中完成(Razor 代码)?
View 仅用于处理我所理解的演示文稿,因此这意味着 Action 不会进行排序(因为这是演示文稿)。但这对我来说并不舒适,因为我觉得我将在 View 和后面(我构建 ViewModel 的地方)中为 UI 设置一些逻辑。
谁负责列表的排序?
编辑:我想避免团队中的某些人在 View 中执行此类操作,而某些人在 Action 中执行此操作。这将是一个令人头疼的维护,因此我问这个问题。
编辑:顺序可以改变。用户可以在页面上新建一个MyObject,用AJAX发布数据,然后我们调用后端(用AJAX)重新获取组,并输出。
啊...如果我们说视图(Razor 代码)必须进行排序,那么现在我们必须有一些额外的 JavaScript 代码来对返回的数据进行排序(因为 Razor 只在页面加载时运行)。所以现在我们在两个地方对代码进行了排序。
【问题讨论】:
-
危险地接近基于意见的问题?
-
我希望不是。我们总是听说 View 只是为了展示,所以我想知道这种排序应该在哪里进行。
-
那么,当前的输出是如何排序的?它总是以相同的顺序还是在不同的页面加载时发生变化?
-
我认为你的视图模型应该准备好展示的集合......所以顺序会发生在视图模型和/或控制器操作中。但是,我同意 InvernoMuto 的观点,你将在这方面有两个阵营。有些人会说你看到的顺序是表示层的一部分。对我来说,视图模型是表示和领域之间的桥梁,所以它是处理这类事情的好地方。 Chiapa 还提出了一个很好的观点,因为您的系统架构可能有助于确定“应该”在哪里进行排序。
-
我在想应该在Service层进行排序。当我们得到数据时,对它进行排序。这样,如果我们动态获取它(AJAX)或仅用于 ViewModel(在服务层中调用相同的方法),它会在同一个地方完成。
标签: asp.net-mvc razor