2012-05-14 120 views
1

我在mvc4应用程序中有2个区域,并且我已注册每个区域的名称空间。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" } 

     ); 

我可以然而进入一体化/时myController的我尝试访问我myController的得到一个错误

多种类型的发现匹配名为“myController的”的控制器。如果为该请求提供服务的路由('{controller}/{action}/{id}')没有指定命名空间来搜索与该请求匹配的控制器,就会发生这种情况。如果是这种情况,请通过调用带有'namespaces'参数的'MapRoute'方法的重载来注册此路由。

我在做什么错?我需要做些额外的事情在根据您提供的代码/说明在Global.asax

回答

2

,这听起来像它可能是一个几件事情:

  1. 你在有一个控制器名称冲突根控制器命名空间(即,在项目根目录下的Controllers文件夹中,而不是在一个区域中)和另一个没有约束的区域。
  2. 更可能的是,您的第二个区域注册Vend具有看起来不正确的命名空间。它应该是WebApplication.Areas.Vend.Controllers而不是WebApplication.Areas.MyController.Controllers。我敢打赌,根控制器名称空间中有一个控制器与Vend区域中的某个控制器名称共享控制器名称。
相关问题