【问题标题】:MVC Action or Razor - Who is responsible for sorting the list?MVC Action 或 Razor - 谁负责对列表进行排序?
【发布时间】: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


【解决方案1】:

我认为您应该只在控制器中对数据做尽可能多的工作。 只有在特殊情况下,您才应该在视图中操作数据。

如果您需要特定的数据自定义,您可以拥有精美的视图模型。

关注点分离听起来像您的关注点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多