将URL映射到具有相同名称的控制器

时间:2013-03-07 14:23:52

标签: asp.net-mvc asp.net-mvc-routing directory-structure

我有以下路由:

routes.MapRoute("Home", "{language}-{culture}/{controller}/{action}");

然后我有两个像这样的控制器:

Controllers
--->en-EN
-------->HomeController
--->pt-PT
-------->HomeController

不幸的是,这不起作用,我收到了这个错误:

“找到了与名为'Home'的控制器匹配的多个类型。如果为此请求提供服务的路由('{language} - {culture} / {controller} / {action}')未指定名称空间,则会发生这种情况搜索与请求匹配的控制器。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。

对'Home'的请求找到了以下匹配的控制器:

MvcApplication2.Controllers.en_EN.HomeController
MvcApplication2.Controllers.pt_PT.HomeController"

我尝试添加命名空间“MvcApplication2.Controllers”作为参数,但它仍然存在,但我不知道它是如何工作的,但这是我在互联网上找到的解决方案。

我刚开始使用ASP.Net MVC,所以如果我错过了一些非常基本的东西,请不要抱歉。

非常感谢。

2 个答案:

答案 0 :(得分:0)

你会有很多不同的文化吗?您可能希望使用MVC Areas。他们是为这种事做的。

如果你只有2,你可以像这样对你的路线进行硬编码:

routes.MapRoute(
     "HomeEn", // Route name
     "en-EN/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.en_EN"}
);

routes.MapRoute(
     "HomePt", // Route name
     "pt-PT/{controller}/{action}", // URL with parameters
     new { controller = "Home", action = "Index" }, // Parameter defaults
     new string[] { "MvcApplication2.Controllers.pt_PT"}
);

答案 1 :(得分:0)

这似乎是一种常见的误解。 MVC路由与您的文件系统没有任何关联。您可以在嵌套文件夹中尽可能深地埋葬控制器,它仍然只是HomeController到MVC。