2014-02-22 20 views
10

Ich arbeite an einem dynamischen Menüsystem für MVC und nur, damit es funktioniert, habe ich eine Teilansicht für das Menü und es funktioniert super die Syntax unter Verwendung:ASP.Net MVC-Controller für _Layout

@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu) 

Aber, um dies zu tun, würde ich das MainMenu und FooterMenu (oder jedes andere Menü für diese Angelegenheit) im ViewBag auf jedem Controller und jeder Aktion einstellen müssen. Um dies zu vermeiden, habe ich mich gefragt, ob es ein empfohlenes Ereignis gibt, dass ich global auf den ViewBag zugreifen könnte. Wenn nicht, empfiehlt jemand, das Menu-Objekt in eine Session-Variable zu übergeben? Es klingt nicht richtig für mich, aber nur das, woran ich gerade denken kann.

UPDATE:

_Layout.cshtml - inklusive ich den neuen Anruf Aktion:

@Html.Action("RenderMenu", "SharedController", new { name = "Main" }) 

SharedController.cs - Added Neue Aktion:

public ActionResult RenderMenu(string name) 
{ 
    if (db.Menus.Count<Menu>() > 0 && db.MenuItems.Count<MenuItem>() > 0) 
    { 
     Menu menu = db.Menus.Include("MenuItems").Single<Menu>(m => m.Name == name); 
     return PartialView("_MenuLayout", menu); 
    } 
    else 
    { 
     return PartialView("_MenuLayout", null); 
    } 
} 

Und es wirft die folgende Ausnahme:

Der Controller für Pfad '/' wurde nicht gefunden oder implementiert IController nicht.

UPDATE 2:

Also, das Problem ist, dass ich die Steuerung durch den vollständigen Namen referenziert und Sie müssen nur den Namen des Controllers minus "Controller". Ordentlicher Leckerbissen. Also, für mein Beispiel, das funktioniert:

@Html.Action("RenderMenu", "Shared", new { name = "Main" }) 

Antwort

5

stellen Sie Ihr Menü als eine Aktion, dann rufen Sie es in Ihrem Master-Layout.

Verwendung @ Html.Action()

die Aktion kann eine Teilansicht mit Ihrem Menü Code darin zurück.

+0

Wow, ich wusste, es war etwas einfaches, aber kannte noch nicht alle Ins-und-Outs von MVC. Vielen Dank Matt! – Keith

+0

froh, dass ich helfen könnte! –

+0

oh oh. Siehe meine neue Ausnahme oben ... – Keith