我已经通过了一些关于Asp.net MVC和目录结构这些问题阅读,但我还是不明白怎么immitate正规网址目录,例如www.mysite.com /书籍/冒险/英国Asp.net MVC URL和目录结构
而且,当你想到的标准网站页面像首页,关于,联系我们等你不会希望为每一个控制器,但你也不想的网址看起来像这样: www.mysite.com/home/about 你会最好希望它是www.mysite.com/about
任何有图路线对象的好足够的了解,以帮助我理解这?
感谢, 雅克
我已经通过了一些关于Asp.net MVC和目录结构这些问题阅读,但我还是不明白怎么immitate正规网址目录,例如www.mysite.com /书籍/冒险/英国Asp.net MVC URL和目录结构
而且,当你想到的标准网站页面像首页,关于,联系我们等你不会希望为每一个控制器,但你也不想的网址看起来像这样: www.mysite.com/home/about 你会最好希望它是www.mysite.com/about
任何有图路线对象的好足够的了解,以帮助我理解这?
感谢, 雅克
这是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)你喜欢按对象类型的控制器,但有链接的是一个动词/名词格式:
routes.MapRoute(
"NewCatchall",
"{action}/{controller}/{name}",
new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);
第二个例子可以完全取代默认路由,以及所有可能的网址将适合其格式。所以没有什么会继续检查任何其他路线。了解路由是按顺序检查很重要,并且使用了与请求匹配的第一个模式 - 其余的忽略。
感谢arserbin3:
这些学习的时候对我很有益的。所以你说的是,对于这些普通页面中的任何一个,你都必须在全局asax文件中创建路由。我想我只是习惯于在CMS环境中工作,每次都必须这样做似乎有点矫枉过正。从MVC的角度来看,它确实有意义。再次感谢 – Jacques 2012-07-13 07:21:56
如何更详细的目录结构,如www.mysite.com/services/electrical/contractors ...? – Jacques 2012-07-13 07:26:17