2011-03-31 4 views
1

Je suis en train d'écrire nouvelle application mvc asp.net et j'ai des questions sur la création de système de navigation multi-niveau.asp.net mvc3 et multi-niveau de navigation

Par exemple, j'ai web avec la navigation principale (Cpu --- ---- Gpu Ram)

et sous-navigation avec (intel, amd --- ati, nvidia --- DDR2, DD3)

Eh bien, ma première mise en œuvre est ici:

public class NavigationItem 
{ 
    public virtual int Id { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Controller { get; set; } 
    public virtual string Action { get; set; } 
    public virtual string Url { get; set; } 
    public virtual string Section { get; set; } 
} 


public class NavigationController : Controller 
{ 
    private readonly IUnitOfWork _unitOfWork; 

    public NavigationController(IUnitOfWork unitOfWork) 
    { 
     _unitOfWork = unitOfWork; 
    } 

    public ActionResult MainMenu() 
    { 
     return View(_unitOfWork.NavigationItems.Where(x => x.Section == null).ToList()); 
    } 

    public ActionResult SectionMenu() 
    { 


     return View(_unitOfWork.NavigationItems.Where(x => x.Section == "// name of section").ToLis()); 
    } 
} 

Et enfin ma page de mise en page est:

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
</head> 
<body> 
<div class="main-menu"> 
    @{Html.RenderAction("MainMenu", "Navigation");} 
</div> 

<div class="section-menu"> 
    @{Html.RenderAction("SectionMenu", "Navigation");} 
</div> 

    @RenderBody() 
</body> 
</html> 

Avec cette implémentation j'ai un problème comment je gère dans SectionMenu avec MainMenu est actif, parce que je veux générer des SectionMenu dépend de MainMenu et les mettre en surbrillance.

Une solution de contournement de sorcière je pense est handle url (contrôleur) dans SectionMenu. Par exemple:

if (RouteData.Values["controller"].ToString() == "Administration") 
    { 
     // Generate section menu for Administration main menu 
    } 

Je ne aime pas cette solution parce que je travaille avec des valeurs « chaîne magique » et je nai un seul contrôleur par un MainMenu.

Comment implémenter cette solution?

Merci pour les conseils

+0

Des mises à jour sur comment vous avez accompli cela? Je viens d'écrire presque exactement ce même code en essayant de faire la même chose ... – Micah

Répondre

0

Ok, j'utilise la fonctionnalité ViewBag. Pas propre, mais fonctionne

0

Je suppose que vous devez obtenir plus profondément dans le système de routage de MVC. Cela n'a pas l'air très simple au début, mais c'est probablement le domaine le plus important de tout le MVC. Parfois, vous pouvez facilement être dérouté, surtout si vous avez plusieurs routes définies dans Global.asax. Il y a un projet appelé débogueur Route, ça aide. Je ne me souviens pas du lien. Essayez de google it ... Si vous ne pouvez pas le trouver, je vais envoyer le lien plus tard ...

+0

Merci pour le commentaire. Oui, le débogueur de route est un excellent lien, ici: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx. Btw oui vous avez raison, j'ai beaucoup d'itinéraires définis dans Global.asax: / – Mennion