2012-07-12 62 views
1

我已经通过了一些关于Asp.net MVC和目录结构这些问题阅读,但我还是不明白怎么immitate正规网址目录,例如www.mysite.com /书籍/冒险/英国Asp.net MVC URL和目录结构

而且,当你想到的标准网站页面像首页,关于,联系我们等你不会希望为每一个控制器,但你也不想的网址看起来像这样: www.mysite.com/home/about 你会最好希望它是www.mysite.com/about

任何有图路线对象的好足够的了解,以帮助我理解这?

感谢, 雅克

回答

1

这是global.asax.cs

默认情况下完全可定制的,一个新的MVC项目增加了下面的约定标准的“包罗万象”路线:www.mysite.com/Controller/Action/ID

如果你想不同的东西,比如你www.mysite.com/about路由的例子HomeController.About()动作,你会之前添加以下路由的包罗万象的一个:

routes.MapRoute(
    "My About Route", 
    "About", 
    new { controller = "Home", action = "About" } 
); 

您可以添加任何数量的不遵循MVC catchall约定的自定义路由,甚至可以根据需要完全替换catchall路由。


编辑:

要回答下面的评论,没有你不一定需要添加一个路由,一切可能的行动,而不是可以让适合的URL的一个模式的单一路线 - 只就像人们正在做的那样。 {controller}{action}是特殊关键字。

例子:

1)程序有一个SetController,但用户都习惯叫它们批次:

routes.MapRoute(
    "Batch", 
    "Batch/{action}/{id}", 
    new { controller = "Set", action = "Index", id = UrlParameter.Optional } 
); 

2)你喜欢按对象类型的控制器,但有链接的是一个动词/名词格式:

  • FlightController
  • HotelController
  • /发现/航班/电子书/飞行
  • /发现/酒店/储备/酒店/希尔顿

routes.MapRoute(
    "NewCatchall", 
    "{action}/{controller}/{name}", 
    new { controller = "Home", action = "Index", name = UrlParameter.Optional } 
); 

第二个例子可以完全取代默认路由,以及所有可能的网址将适合其格式。所以没有什么会继续检查任何其他路线。了解路由是按顺序检查很重要,并且使用了与请求匹配的第一个模式 - 其余的忽略。

+0

感谢arserbin3:

这些学习的时候对我很有益的。所以你说的是,对于这些普通页面中的任何一个,你都必须在全局asax文件中创建路由。我想我只是习惯于在CMS环境中工作,每次都必须这样做似乎有点矫枉过正。从MVC的角度来看,它确实有意义。再次感谢 – Jacques 2012-07-13 07:21:56

+0

如何更详细的目录结构,如www.mysite.com/services/electrical/contractors ...? – Jacques 2012-07-13 07:26:17