路径控制器…未找到或未实现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文章为您提供了一个很好的例子。