【问题标题】:Controller ambigous error, upgraded to MVC 2控制器模棱两可的错误,升级到 MVC 2
【发布时间】:2010-01-28 16:28:59
【问题描述】:

我升级到 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

是否应该添加命名空间来解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您的第一条路线表明有一个类/controllers/Admin/AdminController.cs。这是正确的吗?

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

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

    • 区域
      • 管理员
        • 产品控制器
    • 控制器
      • 产品控制器

    你的结构看起来像这样。

    • 控制器
      • 管理员
        • 产品控制器
      • 产品控制器

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 2011-08-01
        相关资源
        最近更新 更多