2009-04-28 8 views
1

J'ai une structure de menu de base de données que je voudrais ajouter au fichier site.master.ASP.NET MVC - Menu piloté par base de données

J'ai regardé d'autres questions sur StackOverflow mais je n'arrive pas à le faire fonctionner sur mon site web. Comment ajouter un contrôle utilisateur au fichier Site.Master?

Comment ajouter un contrôle utilisateur au fichier Site.Master?

Menu.ascx

<%foreach (MainMenuSort mainMenuSort in (List<MainMenuSort>)ViewData["MainMenuSortListDisplay"]) 
     { %> 
     <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li> 
     <%foreach (SubMenuSort subMenuSort in (List<SubMenuSort>)ViewData["SubMenuSortListDisplay"]) 
      {%> 
      <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id) 
       { %> 
       <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li> 
      <%} %> 
     <%} %> 
     <%}%> 

Répondre

0

Avec l'aide de ce link. J'ai pu afficher un menu dans la page site.master.

3

Vous devez utiliser la méthode Html.RenderPartial dans votre page maître.

Vous devrez définir les touches de données de vue MainMenuSortListDisplay et SubMenuSortListDisplay dans l'action qui appelle la vue qui utilise votre page maître.

Dans votre utilisation principale de cette

<% Html.RenderPartial("~/Views/Shared/Menu.ascx"); 

Le chemin doit être l'application chemin par rapport au dossier du contrôle. Généralement, ceux-ci vont sous Partagé. Vous pouvez faire la structure comme vous voulez sous le dossier partagé.

Pour renforcer cette technique, utilisez une partie fortement typée. Dans la question, vous pourriez créer une nouvelle classe (MenuModel) avec deux collections génériques en tant que propriétés et les placer dans le dossier models de l'application. Ensuite, dans le constructeur du modèle, appelez une méthode qui remplit les listes.

public class MenuModel 
{ 
    public IEnumerable<MainMenuSort> OuterList {get; set;} 
    public IEnumerable<SubMEnuSort> InnerList {get; set;} 
    public MenuModel() 
    { 
     VoidThatFillsTheInnerAndOuterList(); 
    } 

Cela signifie que vous pouvez le faire dans votre contrôleur

public ActionResult ShowAForm() 
{ 
    ViewData["MenuPartialData"] = new MenuModel(); 
    return View(); 
} 

Après avoir mis cette clé, votre page principale peut utiliser la surcharge de RenderPartial, comme celui-ci

<% Html.RenderPartial(
    "~/View/Shared/Menu.ascx", 
    (MenuModel)ViewData["MenuPartialData"]); %> 

Cette suppose que votre partiel est fortement typé à la classe MenuModel. Ensuite, dans la partie, vous pouvez utiliser le modèle qui réécrit votre code légèrement

<% foreach (MainMenuSort mainMenuSort in Model.OuterList) { %> 
    <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li> 
    <% foreach (SubMenuSort subMenuSort in Model.InnerList) {%>    
     <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id) 
     { %>    
      <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li> 
     <%} %> 
    <%} %>  
    <%}%> 

Hope qui aide

+0

Merci. Apprenez juste ASP.NET MVC et avez ajouté <% Html.RenderPartial ("~/Views/Shared/Menu.ascx");%> à la page site.master mais ne comprenez pas ce que vous voulez dire par: "Vous aurez besoin de Définissez les touches de données de vue MainMenuSortListDisplay et SubMenuSortListDisplay dans l'action qui appelle la vue qui utilise votre page maître." – Ros

+0

Vous appelez la page en utilisant une méthode ActionResult dans votre classe de contrôleur.Par cette méthode, vous devrez définir les clés ViewData par exemple ViewData [" SubMenuSortListDisplay "] = SomeListPreferablyFromYourModel –

+0

Revenez en arrière si vous êtes stil coincé :-) –

0

Essayez quelque chose comme

<% Html.RenderPartial("Menu") %> 

EDIT: Correction d'une faute de frappe

0

Vous pouvez également faites-le en HTMLHelper et dans la MasterPage, appelez <% = Html.Menu()%>. Ensuite, dans votre HTMLHelper, vous avez le code pour obtenir les enregistrements de la base de données et les parcourir. Voici un link que j'ai trouvé pour vous aider à démarrer. Notez mes commentaires car il y a un bug dans l'exemple de code fourni. J'ai encore des problèmes de gestion des sous-menus de menus, je suppose que j'ai besoin d'une fonction récursive ou quelque chose ??

+0

Merci d'avoir posté le lien. J'ai utilisé une demande partielle et suivi http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/ – Ros

Questions connexes