2008-08-01 31 views
29

Est-ce que quelqu'un a de l'expérience en créant SQL-based ASP.NET fournisseurs de carte de site?Cartes du site ASP.NET

J'ai le fichier XML par défaut web.sitemap fonctionne correctement avec mon menu et SiteMapPath contrôles, mais je vais besoin d'un moyen pour les utilisateurs de mon site pour créer et modifier dynamiquement les pages.

J'ai également besoin de relier les autorisations de visualisation de page au système d'appartenance standard ASP.NET.

+1

Veuillez sélectionner la meilleure réponse, merci. – mruanova

Répondre

10

La version Jeff Prosise du magazine MSDN fonctionne assez bien, mais il a quelques défauts:

AddNode freaks avec des liens vers des sites externes sur votre menu (www.google.com, etc.)

Voici mon correctif dans BuildSiteMap():

SiteMapNode node = GetSiteMapNodeFromReader(reader); 
string url = node.Url; 
if (url.Contains(":")) 
{ 
    string garbage = Guid.NewGuid().ToString(); // SiteMapNode needs unique URLs 
    node.Url = "~/dummy_" + garbage + ".aspx"; 
    AddNode(node, _root); 
    node.Url = url; 
} 
else 
{ 
    AddNode(node, _root); 
} 

SQLDependency mise en cache est cool, mais si vous ne voulez pas faire un voyage à la DB à chaque fois que vos charges de menu (pour vérifier si la dépendance a changé) et votre menus don ne changez pas très souvent, alors pourquoi ne pas utiliser HttpRuntime.Cache à la place?

public override SiteMapNode RootNode 
{ 
    get 
    { 
     SiteMapNode temp = (SiteMapNode)HttpRuntime.Cache["SomeKeyName"]; 
     if (temp == null) 
     { 
      temp = BuildSiteMap(); 
      HttpRuntime.Cache.Insert("SomeKeyName", temp, null, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration); 
     } 
     return temp; 
    } 
}