视图/控制器操作/路由/ Global.asax

时间:2012-08-12 13:28:26

标签: asp.net-mvc asp.net-routing

我是ASP.NET MVC的新手,来自过去一年的网络表单背景,我最近开始使用MVC 3并且有一些似乎没有好答案的问题(我在这里找不到任何答案)点)并想在这里发布它们。任何帮助,将不胜感激。我的问题只关注控制器,控制器动作,视图和global.asax。

  1. 我理解控制器中视图,控制器和操作的关系。但是,在创建视图时,与创建的视图关联的每个操作是否都必须在global.asax中注册?示例:创建空项目时,global.asax已经为Home控制器创建了一个默认路由,其中​​Index和id的操作是可选的。因此,如果我基于Home控制器创建另一个名为“AboutUs”的视图,我是否需要在global.asax中将其注册为Home控制器的一部分?

  2. 路由器的global.asax在控制器/操作和注册方面是否存在一对一的关系?可以将多个控制器操作添加到以逗号分隔的同一语句中(如使用global.asax中的示例Home控制器,然后在同一语句中添加另一个操作,或者需要在是什么?

  3. 创建控制器/视图/路由时是否有“最佳实践”标准?

  4. 我问这些问题,因为我正在将一个Web表单站点转换为MVC 3而没有找到很多我的问题的好答案。期待任何和所有的回应。

2 个答案:

答案 0 :(得分:1)

Scott Gu有一篇关于MVC路由如何在他的博客上工作的great post,你应该看看它!

Global.asax中的每条路线都有匹配的模式,但不一定是显式匹配。对于您的示例,如果您有一个名为“AboutUs”的视图,如果您有一个名为控制器的操作,它将因模式匹配而起作用:

 routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
 );

行:"{controller}/{action}/{id}"是路由引擎匹配的模式。它表示上面匹配的任何URL路径都将被发送到正确的视图。对于您的示例,如果您要关注网址:Home/AboutUs,则会转到主控制器,关于我们视图,没有参数。

关于第二个问题,所选的控制器也是模式的一部分。如果您添加了第二个名为Contact的控制器,然后添加了一个名为email的操作,那么此URL仍将遵循相同的模式:Contact/Email,因此您无需添加额外的路由。

以下是一些关于MVC路由如何工作的精彩博客文章,它们将指出您正确的方向。一个位于Asp.Neta blog postMSDN

答案 1 :(得分:0)

  1. 您不需要注册在Global.asax中创建的每个视图。只要您遵循惯例(即为您定义的路由或您自己定义的路由,如果您采用此路径),路由将负责处理

  2. 不再。在控制器中创建新Action时,通常需要为该操作创建一个视图以呈现其要执行的操作(ajax / json操作可以作为此规则的例外)。但同样,您不需要在Global.asax中注册任何内容。只要遵循该全局文件中定义的路由约定。

  3. 我说它带来了MVC的经验。一般来说,每个问题都有自己的解决方案,因此它可以完成任务,而不是一般方法。但是,您可以从MVC 3为您定义的默认值开始:I.E。重新定义路由和多个控制器,每个控制器都有多个动作再次,遵循惯例。

  4. 希望这有帮助。