2016-07-22 5 views
2

Ich schreibe eine Anwendung mit ASP.NET MVC 5 mit C#. Ich muss ein globales Menü auf der oberen rechten Seite der Anwendung hinzufügen. Ich wurde empfohlen, other SO Aktion mit ChildActionOnly Attribut zu verwenden.Der Controller für Pfad ... wurde nicht gefunden oder implementiert IController

Also hier ist was ich getan habe.

ich dieses eine Base wie geschaffen

public class BaseController : Controller 
{ 

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

} 

Dann, wie ich geerbt alle meine Controller von BaseController so

public class TasksController : BaseController 
{ 

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

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

} 

die ClientsMenu in meinem Layout zu machen habe ich den folgenden Code

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

Jetzt, wenn ich meine Anwendung ausführen, bekomme ich die f Fehler ach

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

Wenn ich @Html.Action("ClientsMenu", "Menus") aus dem Layout alles entfernen funktioniert gut, aber das globale Menü zeigt nicht natürlich.

Was kann ich tun, um dieses Problem zu beheben?

Aktualisiert Hier ist, was ich nach dem Feedback getan, was ich aus den Kommentaren bekam unter

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(); 
    } 

} 

aber immer noch die gleichen Fehler

+1

Können Sie Ihre RouteConfig.cs veröffentlichen? –

+1

Nehmen Sie 'CleintMenus' Action aus dem Basiscontroller und legen Sie ihn in seinen eigenen Controller. wie das Beispiel, mit dem du verlinkt hast. Basierend auf was du gezeigt hast. Sie haben keinen 'MenusContoller', den' @ Html.Action ("ClientsMenu", "Menüs") sucht. – Nkosi

+0

@Nkosi Das hat nicht funktioniert – Jaylen

Antwort

0

Nehmen ClientMenus Aktion aus dem BaseController und steckte es in seine eigene Steuerung MenusController. Sie können diesen Controller dann über Ihre Ansichten aufrufen.

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

In Ihrem Beispiel Sie haben kein MenusContoller das ist, was @Html.Action("ClientsMenu", "Menus") für sucht.

Der Artikel Phil Haacked - Html.RenderAction and Html.Action, der durch den anderen Pfosten verbunden wurde, stellte ein gutes Beispiel für Sie zur Verfügung, um zu folgen.

Verwandte Themen