2016-07-22 84 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由其他帖子鏈接的文章爲您提供了一個很好的示例。

相關問題