MVC 中的多控制器路由路径
Multiple controller route path in MVC
我有以下类型的 mvc 应用程序区域文件夹结构:
区域 => 文件夹 A => 控制器 => 控制器 A 和控制器 B
我在 AreaRegistration 中使用了以下注册路径:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { controller = "ControllerA|ControllerB", action = "Index", id = UrlParameter.Optional }
);
我在共享布局上有两个链接:
@Html.ActionLink("Link 1", "ActionA", "ControllerA", null)
@Html.ActionLink("Link 2", "ActionB", "ControllerB", null)
Link 1 似乎工作正常并按预期重定向。问题出在 Link2,它总是形成以下 url,我收到 404 错误。
http://localhost:29661/FolderA/ControllerA/ActionB?Length=15
默认应用路由路径为:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
似乎它总是在同一个控制器中寻找 ActionB,即使我注册了 2 个不同的路径。谁能帮忙解决一下。
ControllerA|ControllerB
不是有效的默认值。我相信你想要的是一个约束,而不是你的控制器的默认值。因此,您的路线应该如下所示:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "ControllerA|ControllerB" }
);
但在这种情况下你不需要约束,因为使用的路线可以由区域名称决定,所以你可以通过:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
如果 URL 中没有提供控制器,则控制器的默认位置将是它导航到的位置。您可以使用您所在区域的控制器作为默认控制器,或者排除默认控制器以要求 URL.
中有一个控制器
无论如何,在建设link区域时需要提供区域名称。当您提供字符串作为第三个参数时,您正在使用的重载将不起作用。
@Html.ActionLink("Link 1", "ActionA", "ControllerA", new { area = "FolderA" }, null)
@Html.ActionLink("Link 2", "ActionB", "ControllerB", new { area = "FolderA" }, null)
正如所指出的 here,即使您想导航到非区域,也需要指定区域 link。
@Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)
我有以下类型的 mvc 应用程序区域文件夹结构:
区域 => 文件夹 A => 控制器 => 控制器 A 和控制器 B
我在 AreaRegistration 中使用了以下注册路径:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { controller = "ControllerA|ControllerB", action = "Index", id = UrlParameter.Optional }
);
我在共享布局上有两个链接:
@Html.ActionLink("Link 1", "ActionA", "ControllerA", null)
@Html.ActionLink("Link 2", "ActionB", "ControllerB", null)
Link 1 似乎工作正常并按预期重定向。问题出在 Link2,它总是形成以下 url,我收到 404 错误。
http://localhost:29661/FolderA/ControllerA/ActionB?Length=15
默认应用路由路径为:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
似乎它总是在同一个控制器中寻找 ActionB,即使我注册了 2 个不同的路径。谁能帮忙解决一下。
ControllerA|ControllerB
不是有效的默认值。我相信你想要的是一个约束,而不是你的控制器的默认值。因此,您的路线应该如下所示:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "ControllerA|ControllerB" }
);
但在这种情况下你不需要约束,因为使用的路线可以由区域名称决定,所以你可以通过:
context.MapRoute(
"default1",
"FolderA/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
如果 URL 中没有提供控制器,则控制器的默认位置将是它导航到的位置。您可以使用您所在区域的控制器作为默认控制器,或者排除默认控制器以要求 URL.
中有一个控制器无论如何,在建设link区域时需要提供区域名称。当您提供字符串作为第三个参数时,您正在使用的重载将不起作用。
@Html.ActionLink("Link 1", "ActionA", "ControllerA", new { area = "FolderA" }, null)
@Html.ActionLink("Link 2", "ActionB", "ControllerB", new { area = "FolderA" }, null)
正如所指出的 here,即使您想导航到非区域,也需要指定区域 link。
@Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)