gpt4 book ai didi

c# - MVC 4 - 路由到非区域 Controller 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:11 24 4
gpt4 key购买 nike

我有一个项目,我正在从 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 Controller 。我实际上不确定它之前是如何工作的,但似乎无法让它正确映射。

有什么我想念的吗?相关代码如下:

Global.asax.cs:

...

AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
...

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "" }
);

测试区域注册.cs:

context.MapRoute(
"Test_default",
"Test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);

我确实将 Controllers 文件夹上移了一个级别,以便更符合项目的结构;之前它位于 Areas 文件夹中。但是,在我移动它之前,这些都不起作用,所以我怀疑情况是否如此。我还认为 Autofac 与此有关,但我不太确定,因为如果我从 URL 中删除“测试”部分,它会按预期匹配。

我想这一切都归结为一个问题,即如何在匹配到特定区域的 Controller 目录之前首先检查“通用” Controller 目录,即使是在 URL 中指定的区域也是如此。

预先感谢您的帮助!

编辑:如果有帮助,我注意到在现有的 MVC 2 解决方案中,例如,如果我转到 Test/Home,它将调用 HomeController 的 Index 方法。但是,这不会在新解决方案中发生。这是因为没有与新路线关联的 View 吗?我还没有为每个相应的 .ascx 文件制作新的 .cshtml 文件,但我认为这不重要,因为它们在其他地方使用。

最佳答案

很明显,这个问题与命名空间有关。我曾在此类问题上看到过该答案,但这些问题与寻找观点的碰撞有关。这是我最终添加到我的每个区域注册中的行:

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
);

关于c# - MVC 4 - 路由到非区域 Controller 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47101439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com