sql - Mappe del sito ASP.NET

original title: "sql - ASP.NET Site Maps"


Does anyone have experience creating SQL-based ASP.NET site-map providers?

I have the default XML file web.sitemap working properly with my Menu and SiteMapPath controls, but I'll need a way for the users of my site to create and modify pages dynamically.

I need to tie page viewing permissions into the standard ASP.NET membership system as well.

Qualcuno ha esperienza nella creazione di provider di mappe dei siti ASP.NET basati su SQL? Ho il file XML predefinito web.sitemap che funziona correttamente con i miei controlli Menu e SiteMapPath, ma avrò bisogno di un modo per ...

Questo è il riepilogo dopo la traduzione, se è necessario visualizzare la traduzione completa, fare clic sull'icona "traduci"

Tutte le risposte
  • Translate

    The Jeff Prosise version from MSDN magazine works pretty well, but it has a few flaws:

    AddNode freaks out with links to external sites on your menu (www.google.com, etc.)

    Here's my fix in 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;
        AddNode(node, _root);

    SQLDependency caching is cool, but if you don't want to make a trip to the DB everytime your menu loads (to check to see if the dependency has changed) and your menus don't change very often, then why not use HttpRuntime.Cache instead?

    public override SiteMapNode RootNode
            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;