2014-11-11 8 views
3

Теперь у меня есть Mvc.sitemap XML-файл с следующими данными: MvcSiteMapProvider магазин все узлы в базе данных

<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 или то, что лучший способ реализовать эту логику?

ответ

1

Да, вы можете использовать один поставщик динамических узлов для доставки всех узлов, если это то, что вы предпочитаете. Вам просто нужно убедиться, что вы правильно сопоставляете все свойства ключа и родительского ключа. Это ваш лучший выбор, если вы используете внутренний DI.

При использовании внешнего DI лучше выбрать вариант. Вы можете реализовать ISiteMapNodeProvider, и тогда вам не понадобится XML-файл (или атрибут .NET) для размещения вашего корневого узла. ISiteMapNodeProvider реализуется аналогично IDyanmicNodeProvider, основное отличие заключается в том, что он работает на более низком уровне и требует внешнего DI для внедрения реализации. См. this answer для примера реализации ISiteMapNodeProvider и this answer, чтобы узнать, как вы можете внедрить вашу реализацию. Вам нужно только ввести встроенный XmlSiteMapNodeProvider, если вы намерены использовать XML для конфигурации узла и ReflectionSiteMapNodeProvider, если вы намерены использовать [MvcSiteMapNodeAttribute] для конфигурации узла.

Обратите внимание, что в будущих версиях MvcSiteMapProvider вы сможете использовать ISiteMapNodeProvider без внешнего контейнера DI.