MvcSiteMapProvider存储数据库中的所有节点

时间:2014-11-11 18:11:38

标签: asp.net sitemap mvcsitemapprovider

现在我有Mvc.sitemap xml文件,其中包含以下数据:

<mvcSiteMapNode title="RTS" imageUrl="fa fa-share-alt" controller="Dashboard" action="Index" area="Referrals" >
  <mvcSiteMapNode title="Dashboard" controller="Dashboard" action="Index" area="Referrals" ></mvcSiteMapNode>

  <mvcSiteMapNode title="Referrals" controller="List" action="Index" area="Referrals" visibility="SiteMapPathHelper,!*">
    <mvcSiteMapNode title="New Referral" controller="List" action="New" area="Referrals" visibility="SiteMapPathHelper,!*" preservedRouteParameters="id" />
    <mvcSiteMapNode title="Details" controller="List" action="Details" area="Referrals" visibility="SiteMapPathHelper,!*" preservedRouteParameters="id" >
      <mvcSiteMapNode title="Edit" action="Edit" area="Referrals" visibility="SiteMapPathHelper,!*" preservedRouteParameters="id"/>
    </mvcSiteMapNode>
  </mvcSiteMapNode>

</mvcSiteMapNode>

我想将所有这些节点存储在DB中,并且只有一个不是根节点,如下所示:

<mvcSiteMapNode visibility="MenuHelper,!*" title="Home" controller="Home" action="Index"  imageUrl="fa fa-home">
    <mvcSiteMapNode visibility="MenuHelper,!*" title="Home" controller="Home" action="Index"  imageUrl="fa fa-home" dynamicNodeProvider="RMP.WebClient.Infrastructure.SiteMapDynamicNodeProvider, RMP.WebClient">
    </mvcSiteMapNode>
  </mvcSiteMapNode>

我可以使用DynamicNodeProvider或实现此逻辑的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

是的,如果您愿意,可以使用单个动态节点提供程序提供所有节点。您只需确保正确映射所有键和父键属性。如果您使用内部DI,这是您最好的选择。

如果使用外部DI,则有更好的选择。您可以实现ISiteMapNodeProvider,然后您根本不需要XML文件(或.NET属性)来托管您的根节点。 ISiteMapNodeProvider以与IDyanmicNodeProvider类似的方式实现,主要区别在于它在较低级别运行并需要外部DI来注入实现。有关示例ISiteMapNodeProvider实现和this answer,请参阅this answer以了解如何注入实现。如果打算使用XML进行节点配置,则只需要注入内置的XmlSiteMapNodeProvider;如果打算使用[MvcSiteMapNodeAttribute]进行节点配置,则需要注入ReflectionSiteMapNodeProvider。

请注意,在MvcSiteMapProvider的未来版本中,您将能够在没有外部DI容器的情况下使用ISiteMapNodeProvider。