我正在研究一个ASP.NET MVC项目我正在使用路由来生成友好的URL并且有一个问题我不知道如何最好地解决.
我设置的路由工作如下
{类别}
{类别}/{制造商}
{类别}/{制造商}/{产物}
我遇到的问题是我想以不同的方式显示相同路线的匹配.例如
Category1显示
描述后跟
一张图片后跟一张
产品清单
Category2显示
随后的图像
促销随后是a
描述
我通过将枚举ViewTemplate与类别相关联然后返回具有相同名称的视图来解决这个问题,但这感觉不对,首先是因为我不确定在控制器操作中我应该是这样的逻辑我还在进行相同的数据库调用,这对于某些东西来说很好但是如果一个类别有500个产品,我仍然会将它们拉出数据库,即使是在不使用它们时也是如此.现在到了这一点:
从同一个控制器操作返回不同的视图是错误的吗?
您将如何处理为每个视图加载不同的数据?
如果我错了(我认为我是错的)我应该怎么做这样的事情?
感谢您的帮助.
我不是这里的大师,但在其他MVC框架中,我已经完成(和看过)类似的事情.Controller的工作是根据询问者,询问的内容等来确定返回哪个View.如何确定View名称实际上是对应用程序和/或其可修改性/可测试性最佳的问题.
在MVC中,控制器有责任决定返回哪个视图,因此拥有一个返回许多不同视图的控制器是完全正常的.控制器应该相对简单.他们应该接受客户的指示.访问模型以启动任何需要进行的更改.从模型中获取一些数据.并使用此数据来决定向客户端显示哪个视图.
在你的情况下,我认为控制器适当的做法是:
获取有关产品的一般信息.
使用此一般信息来确定要使用的视图.
获取该特定视图的数据.
返回视图.
我认为如果你担心自己做错了,你需要确保模型只包含在域上下文中有意义的方法.它们不应与特定观点过于紧密联系.例如Product.GetDataForMiniProductView(int id)是错误的,这应该是控制器逻辑.另一方面,Product.GetStockCount绝对应该在模型中,而不是控制器.