asp.net - MvcSiteMapProvider 将所有节点存储在数据库中

标签 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>

我想将所有这些节点存储在数据库中,并且只有一个非根节点,如下所示:

<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 来执行此操作吗?或者实现此逻辑的最佳方法是什么?

最佳答案

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

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

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

关于asp.net - MvcSiteMapProvider 将所有节点存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871577/

相关文章:

c# - BarTender 错误 : Retrieving the COM class factory for component with CLSID in Asp. 网络

asp.net - 如何在 ASP.net 中获取页面中母版页的 Div?

c# - 序列不包含匹配元素 - 使用 LINQ 返回匹配自定义属性的 SiteMapNode

ruby-on-rails - Rails 项目的 Google 站点地图文件

asp.net - Ninject owin 依赖项到 IIS Web 主机中以实现 ASP.net Identity

c# - 将类的属性传递给 ValidationAttribute

python - 如何加入 wagtail 和 django 站点地图?

asp.net-mvc - ASP.NET MVC SiteMap 提供程序——如何在实际菜单中显示 'hide' 单项

asp.net-mvc-5 - 将 mvcSitemap 与 ASP.NET MVC 5 结合使用

asp.net-mvc - 在 ASP.NET MVC 中创建 SiteMap