0

有关的:

找到了多种与名为“Home”的控制器匹配的类型

找到了多种与名为“Home”的控制器匹配的类型 - 在两个不同的区域中


找到了与名为“FW”的控制器匹配的多种类型。

对“FW”的请求找到了以下匹配的控制器:

app.Controllers.Admin.FWController

app.Areas.Manage.Controllers.FWController

我尝试了这些相关链接的建议。我试图通过使用不同的命名空间来区分控制器:

全局.asax.cs

routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}",
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers" }
);
routes.MapRoute(
 "Default_Admin_Top", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers.Admin" }
);

在管理区域ManageAreaRegistration

public override void RegisterArea(AreaRegistrationContext context)
{
 context.MapRoute(
  "Manage_default",
  "Manage/{controller}/{action}/{id}",
  new { action = "Index", id = UrlParameter.Optional },
  new string[] { "app.Areas.Manage.Controllers" }
 );
}

我还在bin文件夹中查找了旧版本,但只有当前版本。

我错过了什么?看来这应该可行。

问题似乎围绕着这样一个事实,即我为控制器提供了自己的命名空间,而它却不在自己的区域中:

namespace app.Controllers.Admin
{
 public class FWController : Controller{}
}

从这里的命名空间中删除.Admin将删除冲突和错误,但我不完全理解为什么。

4

2 回答 2

1

你能试着像这样重新整理你的死记硬背吗?问题可能会出现,因为app.Controllers.Admin在于app.Controller

routes.MapRoute(
 "Default_Admin_Top", // Route name
 "{controller}/{action}/{id}", // URL with parameters
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers.Admin" }
);
routes.MapRoute(
 "Default", // Route name
 "{controller}/{action}/{id}",
 new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
 new string[] { "app.Controllers" }
);
于 2013-05-14T06:54:02.260 回答
0

它看起来类似于我最近遇到的一个问题。

根据您的情况并遇到同样的问题,我怀疑问题出在控制器的命名约定上。例如,您的应用程序有一个FWController在您的根结构中命名的控制器,然后在单独的区域中重新构建/维护您的代码。当您的应用程序启动时,文件中的Application_Start()方法Global.asax将路由注册到路由集合表(MVC 3 模式的核心特性之一),当动作方法在控制器内部执行时,该表维护您的传入请求。

当您有一个与您的案例相同名称的控制器时会出现问题,FWController并且区域的目录结构以某种方式模仿根目录,就像您在引用的 URL 之一中看到的那样。

我实施了类似的解决方案作为 URL 的理由之一,即

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

我根本没有碰我的区域registration.cs文件。

当您重命名命名空间时,您的路由开始指向app.Controllers.FWController(不在app.Areas.Manage.Controllers.FWController),这解决了之前发生的冲突,因为您在您的Global.asax

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}",
  new { controller = "Account", action = "LogOn", id = UrlParameter.Optional },
  new string[] { "app.Controllers" }
);

该请求也忽略了MapRoute包含.admin名称空间的内容。这可能是我相信的原因。希望对您有所帮助。

于 2013-05-13T13:40:00.320 回答