我应该调用我的每个MVC视图Index.aspx吗?

时间:2009-01-21 23:08:12

标签: asp.net-mvc convention

如果我没弄错的话 - ASP.NET MVC的约定似乎要我为控制器视图执行以下操作。

到目前为止,我创建了“产品”目录,我将“索引”视图放入其中。然后我创建一个'ProductsController'并在其上创建一个返回View的'Index'方法。只返回没有参数的View()将获取'Index.aspx'页面,因为它与方法的名称相同。

 public class ProductsController : Controller
    {
        public ActionResult Index()
        {
            return View();   // looks for Index.aspx in Products directory
        }
    }

现在就好了。但我最终会得到十亿个Index.aspx页面,我就是其中一个从不关闭任何文件的人,所以我最终会发疯。

或者,我可以创建Products / Products.aspx并将我的控制器更改为以下内容:

 public class ProductsController : Controller
    {
        public ActionResult Index()  // my default routing goes to Index (from sample project)
        {
            return View("Products");
        }
    }

我理解它是如何工作的,并且它在MVC设计模式中完全可以做到这一点。它不是黑客或类似的东西。

我的问题(在收听this PDC视频后)是关于自定义性的约定在MVC(或任何正确的短语)中受到青睐。

所以我想知道我是否错过了第三种方式,或者人们对Visual Studio中的50个索引标签感觉不错?

3 个答案:

答案 0 :(得分:2)

我认为你应该在操作之后命名方法并命名视图(如果它有意义并且它不在动作之间共享,与动作相同)。您可能应该更改路由机制,因为Index实际上不是一个描述性名称。动作名称应该表示它的作用(就像任何方法一样),不应该硬编码到Index或类似的东西。应该编辑路由。

答案 1 :(得分:2)

每个控制器的默认操作具有相同的名称只是简化了路由(检查global.asax)。此外,所有东西(产品,书籍,联系人......)使用相同功能的同名操作/视图,然后代码变得更容易导航和理解。当作为团队的一部分工作时,这种惯例的使用尤其重要,因为它将鼓励开发人员之间的一致代码。

在查看另一个问题时,我在codeplex上的MVCContrib项目中遇到了SimplyRestfulRouting。这可能会给你一些想法。

答案 2 :(得分:0)

这只是一种模式。使用该模式,但让它适合您。就个人而言,我喜欢用我们的函数命名我的观点,而且我没有很多Index.aspx页面,因为我没有很多索引。