2012-08-12 98 views
1

我新的ASP.NET MVC,在过去的一年里Web窗体背景快到了,我已经开始与MVC 3个工作日前与有似乎没有问题很好的答案(我现在找不到),并想在这里发布。任何帮助,将不胜感激。我的问题只关注控制器,控制器操作,视图和global.asax。查看/控制器动作/路由/ Gobal.asax

  1. 我了解与控制器内的视图,控制器和操作的关系。当涉及到创建视图时,与创建的视图相关的每个动作是否都必须在global.asax中注册?示例:创建空项目时,global.asax已经为Home控制器创建了一个默认路由,其索引操作和id是可选的。所以,如果我基于Home控制器创建另一个名为“AboutUs”的视图,我是否需要在global.asax中注册该视图作为Home控制器的一部分?

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

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

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

回答

0
  1. 不,你并不需要注册的每个查看您在Global.asax中创建。你按照惯例(你或一个你自己定义的,你应该走这条路被定义即路由)的路由只要会照顾那个

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

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

希望这会有所帮助。

1

Sco关于MVC路由如何在他的博客上工作,谷歌有一个great post,你应该检查它!

在每个路由的Global.asax中都有一个匹配的模式,但不一定是明确的匹配。对于你的例子,如果你有一个名为“关于我们”,如果你有一个控制器动作命名,它只会工作,由于该模式匹配的观点:

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),然后添加了一个名为电子邮件的操作,则此URL仍将遵循相同的模式:Contact/Email,因此您不需要添加额外的路由。

以下是关于MVC路由是如何工作的其他一些伟大的博客文章,这将指向你在正确的方向。其中关于Asp.Neta blog post,并在MSDN