代码之家  ›  专栏  ›  技术社区  ›  Simon

从单个控制器操作返回不同的视图是一个坏主意吗?

  •  8
  • Simon  · 技术社区  · 16 年前

    我正在做一个ASP.NET MVC项目,如果我使用路由来生成友好的url,并且有一个问题我不确定如何最好地解决。

    我设置的路由如下

    {类别}

    {类别}/{制造商}

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

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

    类别1显示

    • 后面跟着的描述
    • 后面跟着
    • 产品清单

    类别2显示

    • 后面跟着的图像
    • 晋升之后
    • 说明

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

    1. 从同一控制器操作返回不同的视图是否错误?
    2. 如何为每个视图加载不同的数据?
    3. 如果我错了(我想我是错的),我应该怎么做这样的事情?

    谢谢你的帮助。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Harper Shelby damiankolasa    16 年前

    我不是这里的专家,但在其他MVC框架中,我也做过类似的事情。控制器的工作是根据询问者、询问内容等来确定返回哪个视图。如何确定视图名称实际上取决于什么对您的应用程序和/或其可修改性/可测试性最好。

        2
  •  5
  •   Jack Ryan    16 年前

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

    在你的情况下,我认为管制员应该这样做:

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

    我认为,如果您担心自己做错了,您需要确保模型只包含在域上下文中有意义的方法。他们不应该与某个特定的观点联系得太紧密。例如Product.GetDataForMiniProductView(int id)错误,这应该是控制器逻辑。另一方面,Product.GetStockCount肯定应该在模型中,而不是控制器中。