0

我有以下路由:

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

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

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

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

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

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

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

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

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

非常感谢。

4

2 回答 2

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"}
);
于 2013-03-07T14:37:17.933 回答
0

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

于 2013-03-07T16:50:56.217 回答