我有一个项目,我正在从MVC 2升级 - > MVC 4.在从MVC 2过渡期间 - > MVC 3,我注意到我的一些超链接断了,不再匹配之前定义的路由。我有以下项目结构:
...
App_Data
Areas
Test
Controllers
TestController
Views
Models
Controllers
PartialController
Views
Scripts
...
生成的链接格式为/Test/Partial/Render
。如果我在迁移之前返回并运行项目,则PartialController
Render
操作会按预期进行。但是,现在该应用程序表示它无法找到操作,因为没有Test/Partial
控制器。我实际上不确定它之前是如何工作的,但似乎无法正确映射。
我有什么遗失的东西吗?以下是相关代码:
的Global.asax.cs:
...
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
...
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "" }
);
TestAreaRegistration.cs:
context.MapRoute(
"Test_default",
"Test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
我确实将Controllers文件夹向上移动了一个级别,以更加符合项目的结构;事先它在Areas文件夹本身。然而,在我移动之前,这一切都没有奏效,所以我怀疑是这样的。我也认为Autofac与此有关,但我不太确定,因为如果我刮了"测试"它按照预期匹配的URL部分。
我想这一切都归结为如何检查"泛型"控制器目录首先,在匹配特定于区域的控制器目录之前,即使在URL中指定了区域。
提前感谢您的帮助!
编辑:如果有帮助,我注意到在现有的MVC 2解决方案中,如果我转到Test/Home
,它会调用Index
方法HomeController
。但是,在新解决方案中不会发生这种情况。这是因为没有与新路线相关的View吗?我还没有为每个相应的.ascx文件创建新的.cshtml文件,但是我并不认为这应该是重要的,因为否则会使用它们。
答案 0 :(得分:0)
显然这个问题与命名空间有关。我在这样的问题上看到了答案,但那些与碰撞发现观点有关。以下是我最后添加到我的每个区域注册的行:
context.MapRoute(
"Test_default",
"Test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new string[] { "Project.Web.Controllers", "Project.Web.Areas.Test.Controllers" } //added this line
);