0

我目前正在尝试实现自定义站点地图提供程序。我已经阅读了几个关于它的教程,并遵循了他们的领导。

我创建了一个名为 MySiteMapProvider 的 XmlSiteMapProvider 子类,它位于 MyProject.Security 中。

我已将以下代码添加到我的 Web.config 的 system.web 部分:

 <siteMap defaultProvider="MySiteMapProvider" enabled="true">
        <providers>
            <add name="MySiteMapProvider"
              description="Custom SiteMap provider."
              type="MyProject.Security.MySiteMapProvider "
              siteMapFile="Web.sitemap"
              securityTrimmingEnabled="true" />
        </providers>
    </siteMap>

但我确信我的 Provider 使用不正确。我什至无法从实施开始。为了验证我是否包含了以下(伪)实现:

 public override bool IsAccessibleToUser(System.Web.HttpContext context, System.Web.SiteMapNode node)
    {
        Debug.Print("Hello World");
        throw new Exception();            
        return base.IsAccessibleToUser(context, node);
    }
    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection attributes)
    {
        Debug.Print("Hello World");
        throw new Exception();     
        base.Initialize(name, attributes);
    }
    public override SiteMapNode BuildSiteMap()
    {
        Debug.Print("Hello World");
        throw new Exception();     
        return base.BuildSiteMap();
    }

但是我可以使用该站点并尽可能多地导航,没有出现异常,并且调试控制台根本没有显示 Hello World。

我是不是忘记了什么重要的事情?

4

2 回答 2

2

我没有实现自己的 Provider,而是使用了MvcSiteMapProvider。我需要实现的行为的定制是在一天内通过动态站点地图和自定义 SiteMapNodeVisibilityProvider 实现的。

我还考虑过实现整个 SiteMapProvider,也许是在 SQL 的基础上,我很高兴我不必这样做。

于 2012-04-19T19:11:34.987 回答
0

System.Web.SiteMap.RootNode尝试从代码调用。

于 2012-04-18T09:28:21.763 回答