控制器模糊错误,升级到MVC 2

时间:2010-01-28 16:29:00

标签: c# asp.net asp.net-mvc asp.net-mvc-2

我升级到MVC 2,更新了我的所有程序集(也复制到本地)。

我改变了我的路线:

routes.MapRoute(
                "Admin",
                "admin/{controller}/{action}/{id}",
                new { controller = "Admin", action = "index", id = ""},
                new[] { "MyNamespace.Web.Controllers.Admin" } // namespace
            );


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

我的控制器看起来像:

/controllers/admin/ProductController.cs
/controllers/ProductController.cs

我仍然收到错误:

he controller name 'Product' is ambiguous between the following types:
MyNamespace.Web.Controllers.Admin.ProductController
MyNamespace.Web.Controllers.ProductController

添加命名空间是否应解决此问题?

2 个答案:

答案 0 :(得分:3)

您的第一条路线表明有一个班级/controllers/Admin/AdminController.cs。这是对的吗?

此外,请阅读this。看起来您已经提供了命名空间区域,但它们并不与ASP.NET MVC v2似乎需要的结构相同。

您的项目解决方案结构应如下所示:

    • 管理
      • ProductController的
  • 控制器
    • ProductController的

您的结构看起来像这样。

  • 控制器
    • 管理
      • ProductController的
    • ProductController的

答案 1 :(得分:1)

对MVC 2 Beta进行了更改,其中指定命名空间(如“MyNamespace.Web.Controllers”)将在该命名空间中搜索及其子命名空间。这与MVC 1行为不同,其中指定命名空间会导致工厂只查看该命名空间。

此更改将在MVC 2 RTM之前恢复。具体来说,MVC 2 RTM行为将指定“MyNamespace.Web.Controllers”将仅搜索该命名空间 - 就像在MVC 1中一样 - 并指定“MyNamespace.Web.Controllers。*”(注意点星)将搜索该命名空间及其子节点。