ASP.Net MVC Contrôleur pour _Layout
Je suis en train de travailler sur un menu dynamique du système pour MVC et juste pour le faire fonctionner, j'ai créé une vue partielle pour le menu et il fonctionne très bien en utilisant la syntaxe ci-dessous:
@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu)
MAIS, pour ce faire, je dois régler le MainMenu et FooterMenu (ou tout autre menu) dans le ViewBag sur chaque Contrôleur et chaque action. Pour éviter cela, je me demandais si il y avait un recommandé de l'événement que j'ai pu accéder à la ViewBag à l'échelle mondiale. Si non, personne ne vous recommandons de passer le Menu objet dans une variable de session? Le son n'est pas bonne pour moi, mais la seule chose que je peux penser de la droite maintenant.
Mise à JOUR:
_Layout.cshtml - j'ai inclus le nouvel appel à l'Action:
@Html.Action("RenderMenu", "SharedController", new { name = "Main" })
SharedController.cs - Ajout d'une Nouvelle Action:
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);
}
}
Et il jette l'exception suivante:
Le contrôleur pour le chemin '/' n'a pas été trouvé ou n'est pas de mettre en œuvre
IController.
Mise à JOUR 2:
Donc, le problème est que j'ai référencé le Contrôleur par le nom complet et vous avez seulement besoin du nom du contrôleur de moins "Contrôleur". Neat friandise. Donc, pour mon exemple, cela fonctionne:
@Html.Action("RenderMenu", "Shared", new { name = "Main" })
OriginalL'auteur clockwiseq | 2014-02-22
Vous devez vous connecter pour publier un commentaire.
ensemble votre menu comme une action, puis l'appeler à votre disposition principale.
utiliser @Html.Action()
l'action de retour une vue partielle avec votre code de menu.
content d'avoir pu aider!
uh oh. Voir ma nouvelle exception au-dessus de...
Passons sur le fait...donc désolé, j'ai mis à jour mon code encore une fois. Le problème est que j'ai été y compris le nom complet du contrôleur lorsque j'ai seulement besoin "Partagé"
vous avez SharedController dans l'action, devrait-il être Mon
OriginalL'auteur Matt Tabor