views:

479

answers:

1

I'm trying to write my first very own SiteMapProvider subclass. It is meant to be populated dynamically using a bunch of different database lookups, much like all of the examples I've found on the web.

However, there are a whole bunch of things that are quite unclear to me. Here are my two first questions:

  • Why is StaticSiteMapProvider used in virtually everyone's project instead of SiteMapProvider? Since the class contains the name "static", I'm getting the impression that it's not as...well, dynamic as I want it.
  • Can someone provide me with a super-minimalistic SiteMapProvider subclass which populates the map using only static data, i.e. no database access, etc.?
A: 

SiteMapProvider can be tottaly dynamic. For example it can make dynamic lookup just for nodes. In contrast with StaticSiteMapProvider you should know whole structure. So this for you to decide what to choose.

You can look at the XmlSiteMapProvider, this is good example of "static" map provider.

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;
    }
}

I did not checked this, but should work.

Mike Chaliy
This all looks very nice, but could you give me an example of how I would add subnodes to "test"?
Deniz Dogan
FWIW, I had to override `GetRootDoneCore` as well for it to work.
Deniz Dogan
Answer updated, you have to use `base.AddNode`. Refarding `GetRootDoneCore`, I did this ages before, so cannot remember everything, sorry..
Mike Chaliy
Funny, there is full example on MSDN - http://msdn.microsoft.com/en-us/library/system.web.staticsitemapprovider.aspx , take a look.
Mike Chaliy