2016-07-22 41 views
2

私はASP.NET MVC 5を使用してC#を使用してアプリケーションを作成しています。私は、アプリケーションの右上にグローバルメニューを追加する必要があります。 ChildActionOnly属性でアクションを使用するように私にはother SOとアドバイスされました。パスのコントローラが見つかりませんでしたか、またはIControllerを実装していません

ここに私が行ったことがあります。

は私が私のレイアウトで ClientsMenuをレンダリングするので、

public class TasksController : BaseController 
{ 

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

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

} 

よう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を作成した私は、次のコードを追加

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

私のアプリケーションを実行すると、f私は、レイアウトのすべてのものから@Html.Action("ClientsMenu", "Menus")を削除すると、エラー

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

をollowingは正常に動作しますが、世界的なメニューはもちろん、表示されません。

この問題を解決するにはどうすればよいですか?ここで を更新しました

私は

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"、 "Menus")が探しているものである 'MenusContoller'を持っていません。 – Nkosi

+0

@ Nkosiそれは動作しませんでした – Jaylen

答えて

0

BaseControllerの外にClientMenus行動を取り、に入れてフィードバックした後にやっていることですそれ自身のコントローラーMenusController。その後、ビューからそのコントローラーを呼び出すことができます。あなたの例では

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

あなたは@Html.Action("ClientsMenu", "Menus")が探しているものであるMenusContollerを持っていません。

Phil Haacked - Html.RenderAction and Html.Action他の投稿にリンクされている記事は、あなたに従うべき良い例を提供しました。