1

我在 mvc4 应用程序中有 2 个区域,并且我已经为每个区域注册了命名空间。

 public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Intergration_default",
            "Intergration/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.Intergration.Controllers" }

        );

    } 
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Vend_default",
            "Vend/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional},
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.MyController.Controllers" }

        );

我可以访问 Intergration/MyController 但是当我尝试访问 MyController 时出现错误

找到了与名为“mycontroller”的控制器匹配的多种类型。如果服务此请求的路由 ('{controller}/{action}/{id}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用采用“namespaces”参数的“MapRoute”方法的重载来注册此路由。

我究竟做错了什么?我需要在 global.asax 中做一些额外的事情吗

4

1 回答 1

2

根据您提供的代码/描述,听起来可能是几件事:

  1. 您在根控制器命名空间(即,在项目根目录中的 Controllers 文件夹中,而不是在一个区域中)与另一个没有约束的区域发生了控制器名称冲突。
  2. 更有可能的是,您的第二个区域注册Vend的名称空间看起来不正确。而不是WebApplication.Areas.MyController.Controllers应该是WebApplication.Areas.Vend.Controllers. Vend我敢打赌,您的根控制器命名空间中有一个控制器,它与该区域中的某些东西共享一个控制器名称。
于 2012-05-15T02:57:47.497 回答