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