有没有办法根据特定路径进行路由映射

时间:2012-02-22 17:23:58

标签: c# asp.net asp.net-mvc-3 razor

我编写了很多ASP.NET代码,但我对.net MVC有点新意,我有一个像这样注册的默认路由:

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

我想在网站上添加另一个管理员区域,所有的URL都是“http:// localhost / Administrator / controller1”,“http:// localhost / Administrator / controller2”等等。我管理员命名空间中有很多控制器,我试图用一个MapRoute注册那些控制器,我做了类似的事情:

routes.MapRoute("Administrator_default", "Administrator/{controller}/{action}/{id}", new { controller = "Administrator", action = "Index", id = "" });

它适用于那些控制器,但有一个问题是,在我尝试进行重定向时,在某些其他控制器中:

return RedirectToAction("Index", "Forum");

然后我将始终重定向到http://localhost/Administrator/Forum而不是http://localhost/Forum,这不是一个大问题但是让URL看起来很奇怪,我试图限制到某个命名空间但它不起作用。它看起来就像我正在尝试注册两个默认路由而.Net只匹配第一个,我想知道有没有办法让它只有两个默认路由并且只在特定路径上映射?

2 个答案:

答案 0 :(得分:3)

这个确切的问题是为Areas添加到MVC 2 http://www.asp.net/whitepapers/what-is-new-in-aspnet-mvc#_TOC3_2

的原因

答案 1 :(得分:0)

同意扎克的回答。

  1. 不太理想,但您可以选择在项目的控制器根文件夹(例如/controllers/HomeController.cs)中使用控制器以及区域中的控制器(可能是显示的高级根页)区域菜单。)

  2. 其次是使用RedirectToAction方法的快速提示。您也可以使用路径参数指定要重定向的区域,例如:

    RedirectToAction(“Index”,“Form”,new {area =“MyOtherArea”});