【问题标题】:ASP.NET MVC - Is returning different views from a single controller action a bad idea?ASP.NET MVC - 从单个控制器操作返回不同的视图是一个坏主意吗?
【发布时间】:2009-01-08 15:54:05
【问题描述】:

我正在开发一个 ASP.NET MVC 项目,我正在使用路由来生成友好的 URL,并且遇到了一个我不知道如何最好地解决的问题。

我设置的路由如下所示

{类别}

{类别}/{制造商}

{类别}/{制造商}/{产品}

我遇到的问题是我想以不同的方式显示对同一路线的匹配。例如

类别 1 显示

  • 描述后跟
  • 一个图像后跟一个
  • 产品列表

Category2 显示

  • 后跟的图片
  • 促销后跟一个
  • 说明

我已经通过将枚举 ViewTemplate 与类别关联然后返回具有相同名称的视图来解决这个问题,但这感觉不对,首先因为我不确定我是否应该在控制器操作,而且我仍在进行相同的数据库调用,这对于某些东西来说很好,但是如果一个类别有 500 种产品,我仍然会将它们从数据库中提取出来,即使是 Category2 也不会使用它们。言归正传:

  1. 从同一个控制器动作返回不同的视图有错吗?
  2. 您将如何处理为每个视图加载不同的数据?
  3. 如果我错了(我认为我错了)我应该怎么做这样的事情?

感谢您提供的任何帮助。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我在这里不是专家,但在其他 MVC 框架中,我做过(并看到过)类似的事情。 Controller 的工作是根据谁在询问、询问什么等来确定返回哪个 View。如何确定 View 名称实际上取决于什么最适合您的应用程序和/或其可修改性/可测试性。

    【讨论】:

      【解决方案2】:

      在 MVC 中,控制器负责决定返回哪个视图,因此拥有一个返回多个不同视图的控制器是完全正常的。控制器应该相对简单。他们应该接受客户的指示。访问模型以启动任何需要进行的更改。从模型中获取一些数据。并使用这些数据来决定向客户端显示哪个视图。

      在你的情况下,我认为控制器做的适当的事情是:

      1. 获取有关产品的一些一般信息。
      2. 使用此一般信息来决定使用哪个视图。
      3. 获取该特定视图的数据。
      4. 返回视图。

      我认为,如果您担心自己做错了,您需要确保模型仅包含在领域上下文中有意义的方法。它们不应该与特定视图过于紧密地联系在一起。例如 Product.GetDataForMiniProductView(int id) 是错误的,这应该是控制器逻辑。另一方面,Product.GetStockCount 绝对应该在模型中而不是控制器中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2012-10-15
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多