1

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

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

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

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

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

4

2 回答 2

1

Scott Gu在他的博客上发表了一篇关于 MVC 路由如何工作的精彩文章,您应该查看一下!

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

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

row:"{controller}/{action}/{id}"是路由引擎正在匹配的模式。它表示任何与上面匹配的 URL 路径都将被发送到正确的视图。对于您的示例,如果您要遵循 url: Home/AboutUs那么它将带您到 Home Controller,About us 视图,没有参数。

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

以下是其他一些关于 MVC 路由如何工作的精彩博客文章,它们将为您指明正确的方向。一个在Asp.Net一篇博文和MSDN上

于 2012-08-12T13:41:44.857 回答
0
  1. 不,您不需要注册您在 Global.asax 中创建的每个视图。只要您遵循约定,路由就会解决这个问题(即为您定义的路由或您自己定义的路由,如果您采用此路径)

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

  3. 我会说它带有 MVC 的经验。一般来说,每个问题都有自己的解决方案,所以它取决于手头的任务,而不是一般的方法。但是,您可以从 MVC 3 为您定义的默认值开始:IE 重新定义路由和多个控制器,每个控制器具有多个操作。再次,遵循约定。

希望这可以帮助。

于 2012-08-12T15:57:33.927 回答