2009-01-21 37 views
2

如果我没有弄错 - ASP.NET MVC的约定似乎希望我为控制器视图执行以下操作。我应该打电话给我的每个MVC视图Index.aspx?

这就是我创建'产品'目录的日子,我把'我的'索引'视图放置在该目录中。然后我创建一个'ProductsController'并在其上创建一个'Index'方法,它返回一个View。只返回没有参数的View()会去取'Index.aspx'页面,因为它与方法名称相同。

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

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

或者我可以创建产品/ Products.aspx和我的控制器更改为以下:

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

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

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

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

回答

2

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

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

+0

所以你不介意Index.aspx页面吨? – 2009-01-22 23:42:15

0

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

+0

但肯定'index.aspx'的想法只是与'标准'index.htm或index.html约定相同。它不关于任何种类的指数。他们可以称之为默认,我实际上认为这是一个更好的名称的方法,但MS可能想远离default.aspx – 2009-01-21 23:36:56

2

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

+0

我还没有进入路由呢!我会更深入地研究,但我认为理解它肯定会教我​​很多。试图今天学习MVC并同时为他重新格式化一个同事笔记本电脑 – 2009-01-21 23:38:01

相关问题