我有以下路由:
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,所以如果我错过了一些非常基本的东西,请不要抱歉。
非常感谢。
答案 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。