2016-07-22 88 views
2

我正在使用c#编写使用ASP.NET MVC 5的应用程序。我需要在应用程序的右上角添加全局菜单。我被告知other SO使用ChildActionOnly属性的操作。路径控制器...未找到或未实现IController

所以这就是我所做的。

我创建了一个BaseController这样

public class BaseController : Controller 
{ 

    [ChildActionOnly] 
    public ActionResult ClientsMenu() 
    { 
     using (SomeContext db = new SomeContext()) 
     { 
      return PartialView(db.Database.SqlQuery<Client>("SELECT * FROM clients").ToList()); 
     } 
    } 

} 

于是我继承了我的所有控制器从BaseController像这样

public class TasksController : BaseController 
{ 

    public ActionResult Index(int ClientId) 
    { 
     ... 
     return View(); 
    } 

    public ActionResult Show(int SurveyId) 
    { 
     ... 
     return View(); 
    } 

} 

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

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

现在,当我运行我的应用程序时,我得到了f ollowing错误

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<Client>("SELECT * FROM clients").ToList()); 
     } 
    } 

    public ActionResult Index(int ClientId) 
    { 
     ... 
     return View(); 
    } 

    public ActionResult Show(int SurveyId) 
    { 
     ... 
     return View(); 
    } 

} 

,但仍是同样的错误后进行

+1

你能发布你的RouteConfig.cs吗? –

+1

将'CleintMenus'动作从基础控制器中取出并放入其自己的控制器中。就像你连接的例子一样。根据你展示的内容。你没有'@ Html.Action(“ClientsMenu”,“菜单”)正在寻找的'MenusContoller'。 – Nkosi

+0

@Nkosi那没有用 – Jaylen

回答

0

采取ClientMenus行动了BaseController,并把它变成它自己的控制器MenusController。然后,您可以从视图中调用该控制器。

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

在你的榜样,你没有一个MenusContoller这是什么@Html.Action("ClientsMenu", "Menus")所期待的。

Phil Haacked - Html.RenderAction and Html.Action由其他帖子链接的文章为您提供了一个很好的示例。

相关问题