区域路线问题(沿着地区)

我应该如何配置下列非区域路线?

/富/ {控制器} / {行动} / {ID}
映射到名称空间myapp.foo中的控制器。

/ {控制器} / {行动} / {ID}
映射到命名空间myapp中的控制器。

我也有2个区域, barbaz ,他们在registeraAllAreas注册。

我目前的设置

这是我目前的设置。 当我使用url / Home / Index时,它给出了下面的问题。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("myapp/elmah.axd/{*pathInfo}");

AreaRegistration.RegisterAllAreas();

routes.MapRoute(
    "foo", // Route name
    "foo/{controller}/{action}/{id}", // URL with parameters
    new { action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new string[] { "myapp.Controllers.foo" }
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new string[] { "myapp.Controllers" }
);

找到多个与名为“菜单”的控制器相匹配的类型。 如果为该请求提供服务的路由( 'foo / {controller} / {action} / {id}' )没有指定命名空间来搜索与该请求匹配的控制器,就会发生这种情况。

'Menu'的请求找到了以下匹配的控制器:myapp.Controllers.MenuController
myapp.Areas.bar.Controllers.MenuController
myapp.Areas.baz.Controllers.MenuController

很明显,我做错了一些事情。

更新

我使用时也会生成错误的地址:

<% using (Ajax.BeginForm("SaveSomething", "Home", ...

它呈现<form target="/foo/Home/SaveSomething"

我猜测,在同一地区的两条路线中,无法可靠地使用{controller}。

更新2

当我将/ foo路由注册在底部时似乎工作得更好。
这提出了一个问题,什么被视为一个/默认路线? (因为默认路线被建议放在最后。)


您有两个名称为MenuController控制器,因此如果您不提供更多信息,MVC不知道要使用哪一个控制器。 在您的区域中,您可能有一个名为<YourAreaName>AreaRegistration 。 打开这些文件并更新RegisterArea方法,以便将请求路由到正确的控制器。

从你的错误消息,它似乎是路由映射到foo / {controller} / {action} / {id},它没有MenuController 。 我的猜测是你在某个页面上的某个页面上有一个动作链接。 如果您未指定链接的区域,则会生成不正确的链接。

尝试使用ActionLink使用默认路由:

@Html.ActionLink("Some text", "action", "controller", new { area = "" }, null)

如果您希望请求转到特定区域,只需在通话中写下。

更新:问题是,当你写Ajax.BeginForm("SaveSomething", "Home",...)之类的东西Ajax.BeginForm("SaveSomething", "Home",...)它会匹配第一条路线。 由于foo路由不是一个区域,所以你不能通过将区域放在BeginForm语句中来解决这个问题。 你有两个选择,1:将foo部分移动到一个区域,2:将foo路由放在默认路由之后。 如果您将默认路由放在foo路由之前,只要您将foo与默认路由(默认区域)放在同一区域,就会很难渲染url,因为路由引擎会始终首先找到默认路由。 但是,您将能够捕捉到foo路由的请求。 所以我最好的建议是把foo路线放在一个区域。

链接地址: http://www.djcxy.com/p/36757.html

上一篇: area route problems (alongside areas)

下一篇: Does ASP.NET MVC create default routes for areas