当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET MVC - 从单个控制器动作返回不同的视图是个坏主意吗?

如何解决《ASP.NETMVC-从单个控制器动作返回不同的视图是个坏主意吗?》经验,为你挑选了2个好方法。

我正在研究一个ASP.NET MVC项目我正在使用路由来生成友好的URL并且有一个问题我不知道如何最好地解决.

我设置的路由工作如下

{类别}

{类别}/{制造商}

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

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

Category1显示

描述后跟

一张图片后跟一张

产品清单

Category2显示

随后的图像

促销随后是a

描述

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

    从同一个控制器操作返回不同的视图是错误的吗?

    您将如何处理为每个视图加载不同的数据?

    如果我错了(我认为我是错的)我应该怎么做这样的事情?

感谢您的帮助.



1> Harper Shelb..:

我不是这里的大师,但在其他MVC框架中,我已经完成(和看过)类似的事情.Controller的工作是根据询问者,询问的内容等来确定返回哪个View.如何确定View名称实际上是对应用程序和/或其可修改性/可测试性最佳的问题.



2> Jack Ryan..:

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

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

    获取有关产品的一般信息.

    使用此一般信息来确定要使用的视图.

    获取该特定视图的数据.

    返回视图.

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

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有