2

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

就在今天,我创建了“产品”目录,并在其中放置了“索引”视图。然后我创建一个“ProductsController”并在其上创建一个返回视图的“索引”方法。仅返回不带参数的 View() 将去获取“Index.aspx”页面,因为它与方法名称相同。

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

现在就好了。但是我最终会得到 10 亿个 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 设计模式中完全可以做到这一点。它不是黑客或类似的东西。

我的问题(在听了这个PDC 视频之后)是 MVC 中优先考虑可定制性的约定(或者任何正确的短语)。

所以我想知道我是否错过了第三种方式,或者人们是否可以在 Visual Studio 中使用 50 个索引选项卡?

4

3 回答 3

2

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

于 2009-01-21T23:27:47.233 回答
2

让每个控制器的默认操作具有相同的名称只会简化路由(检查 global.asax)。此外,所有事物(产品、书籍、联系人……)都使用具有相同名称的操作/视图来实现相同的功能,这样代码就变得更易于导航和理解。当作为团队的一部分工作时,这种约定的使用尤其重要,因为它将鼓励开发人员之间的代码一致。

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

于 2009-01-22T23:05:27.900 回答
0

这只是一个模式。使用模式,但让它为你工作。就我个人而言,我喜欢按其功能命名我的视图,并且我没有很多 Index.aspx 页面,因为我没有很多索引。

于 2009-01-21T23:18:04.537 回答