Répondre

1

Vous aurez probablement besoin de trois choses:

  1. Une structure hiérarchique dans votre base de données *
  2. Un fournisseur SiteMap personnalisé basé sur la StaticSiteMapProvider lire la hiérarchie
  3. Un contrôle SiteMapPath pour afficher le fil d'ariane.

* Je l'avais fait un peu de chasse autour quand je voulais quelque chose de similaire pour un site client, et a décidé que le stockage de la structure de chemin dans la base de données serait plus simple - j'ai donné la answer previously here pour une profondeur arbitraire plan du site - Notez que si vous utilisez SQL2008, vous pouvez utiliser le nouveau type de données HierarchyId pour vous faciliter la tâche. Cela dit, si vous avez des choses comme des catégories et des produits, vous pouvez probablement vous en sortir avec un système plus simple dans votre base de données.

Les principales fonctions que je avais besoin de créer pour résoudre ce sont des choses comme:

/// <summary> 
/// Gets this SiteMaps children. 
/// </summary> 
/// <value>The children.</value> 
public List<SiteMap> Children { 
    get { 
    if (null == m_Children && !m_AttemptedToLoadChildren) { 
     m_AttemptedToLoadChildren = true; 

     m_Children = ctx.GetSiteMapChildrenByPath(_Path, 1).ToList(); 

     // Sorts ascending. 
     m_Children.Sort((sm1, sm2) => sm1.SortOrder.CompareTo(sm2.SortOrder)); 
     // CMS Sorts Descending, so reverse the list. 
     m_Children.Reverse(); 
    } 

    return m_Children; 
    } 
} 

/// <summary> 
/// Gets a value indicating whether this instance has any children. 
/// </summary> 
/// <value> 
/// <c>true</c> if this instance has children; otherwise, <c>false</c>. 
/// </value> 
public bool HasChildren { 
    get { 
    if (null != Children && Children.Any()) { 
     m_HasChildren = true; 
    } 

    return m_HasChildren; 
    } 
} 

/// <summary> 
/// Gets this SiteMaps parent. 
/// </summary> 
/// <value>The parent.</value> 
public SiteMap Parent { 
    get { 
    if (null == m_Parent && null != _ParentId) { 
     m_Parent = ctx.GetSiteMap(_ParentId); 
    } 

    return m_Parent; 
    } 
} 

GetSiteMap et GetSiteMapChildrenByPath appel en procs stockées pour construire la hiérarchie en le tirant avec LINQ allait être assez complexe.

0

Salut Avez-vous eu un coup d'oeil à mon habitude SitMapProvider here

Cela vous permet d'obtenir la structure du métamodèle avec l'annotation et un fichier séparé de plan du site pour les pages non DD.