路径控制器…未找到或未实现IController

我正在使用c#编写使用ASP.NET MVC 5的应用程序。 我需要在应用程序的右上角添加一个全局菜单。 我被告知其他SO使用ChildActionOnly属性的动作。

所以这就是我所做的。

我创建了一个像这样的BaseController

 public class BaseController : Controller { [ChildActionOnly] public ActionResult ClientsMenu() { using (SomeContext db = new SomeContext()) { return PartialView(db.Database.SqlQuery("SELECT * FROM clients").ToList()); } } } 

然后我inheritance了BaseController所有控制器,就像这样

 public class TasksController : BaseController { public ActionResult Index(int ClientId) { ... return View(); } public ActionResult Show(int SurveyId) { ... return View(); } } 

要在我的布局中呈现ClientsMenu ,我添加了以下代码

 @Html.Action("ClientsMenu", "Menus") 

现在,当我运行我的应用程序时,我收到以下错误

 The controller for path '/Tasks/Index' was not found or does not implement IController. 

当我从布局中删除@Html.Action("ClientsMenu", "Menus")时,一切正常但当然没有显示全局菜单。

我该怎么做才能解决这个问题?

更新以下是我从以下评论中得到的反馈后所做的事情

 public class TasksController : Controller { [ChildActionOnly] public ActionResult ClientsMenu() { using (SomeContext db = new SomeContext()) { return PartialView(db.Database.SqlQuery("SELECT * FROM clients").ToList()); } } public ActionResult Index(int ClientId) { ... return View(); } public ActionResult Show(int SurveyId) { ... return View(); } } 

但仍然是同样的错误

ClientMenus Action从BaseController并将其放入自己的控制器MenusController 。 然后,您可以从Views中调用该控制器。

 @Html.Action("ClientsMenu", "Menus") 

在你的例子中,你没有MenusContoller ,这就是@Html.Action("ClientsMenu", "Menus")正在寻找的东西。

Phil Haacked -由另一篇post链接的Html.RenderAction和Html.Action文章为您提供了一个很好的例子。