我升级到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
添加命名空间是否应解决此问题?
答案 0 :(得分:3)
您的第一条路线表明有一个班级/controllers/Admin/AdminController.cs
。这是对的吗?
此外,请阅读this。看起来您已经提供了命名空间区域,但它们并不与ASP.NET MVC v2似乎需要的结构相同。
您的项目解决方案结构应如下所示:
您的结构看起来像这样。
答案 1 :(得分:1)
对MVC 2 Beta进行了更改,其中指定命名空间(如“MyNamespace.Web.Controllers”)将在该命名空间中搜索及其子命名空间。这与MVC 1行为不同,其中指定命名空间会导致工厂只查看该命名空间。
此更改将在MVC 2 RTM之前恢复。具体来说,MVC 2 RTM行为将指定“MyNamespace.Web.Controllers”将仅搜索该命名空间 - 就像在MVC 1中一样 - 并指定“MyNamespace.Web.Controllers。*”(注意点星)将搜索该命名空间及其子节点。