2009-11-11 4 views
3

J'essaie d'écrire ma première sous-classe SiteMapProvider. Il est censé être peuplé dynamiquement en utilisant un tas de différentes recherches de base de données, un peu comme tous les exemples que j'ai trouvé sur le web.ASP.NET: Carte de site personnalisée à remplissage dynamique (SiteMapProvider)

Cependant, il y a beaucoup de choses qui ne me sont pas claires. Voici mes deux premières questions:

  • Pourquoi StaticSiteMapProvider utilisé dans le projet de pratiquement tout le monde au lieu de SiteMapProvider? Puisque la classe contient le nom "static", j'ai l'impression que ce n'est pas aussi ... bien, dynamique que je le veux.
  • Quelqu'un peut-il me fournir une sous-classe super-minimaliste SiteMapProvider qui remplit la carte en utilisant uniquement des données statiques, c'est-à-dire sans accès à la base de données, etc.?
+0

Avez-vous des liens vers les ressources et exemples que vous avez lus? –

Répondre

3

SiteMapProvider peut être tottaly dynamique. Par exemple, il peut faire une recherche dynamique juste pour les nœuds. Contrairement à StaticSiteMapProvider, vous devez connaître la structure entière. Donc, ceci pour vous de décider quoi choisir.

Vous pouvez regarder le XmlSiteMapProvider, ceci est un bon exemple de fournisseur de carte "statique".

public class CoolMapProvider : StaticSiteMapProvider 
{ 
    public override SiteMapNode BuildSiteMap() 
    { 
     var root = new SiteMapNode(this, "test", "~/test.aspx"); 
     base.AddNode(root, null); 

     base.AddNode(new SiteMapNode(this, "test-child", "~/test_child.aspx"), root); 

     return root; 
    } 
} 

Je n'ai pas vérifié cela, mais cela devrait fonctionner.

+0

Tout cela semble très bien, mais pourriez-vous me donner un exemple de la façon dont j'ajouterais des sous-nœuds à "test"? –

+0

FWIW, j'ai dû aussi redéfinir 'GetRootDoneCore' pour que cela fonctionne. –

+0

Réponse mise à jour, vous devez utiliser 'base.AddNode'. Refusant 'GetRootDoneCore', j'ai fait cela avant l'âge, donc je ne me souviens pas de tout, désolé .. –