Using asp.net MVCSiteMapProvider v4 with 2 site maps

Hi, I would like to use asp.net MVCSiteMapProvider v4 with two different Sitemaps, one for the main site and one for the administration area. I did a search and I found that you need to embed it on web.config:

<siteMap defaultProvider="AppSiteMapProvider" enabled="true"> <providers> <clear /> <add name="AppSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" siteMapFile="~/Mvc2.sitemap" securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" excludeAssembliesForScan="" attributesToIgnore="visibility" nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" /> <add name="AdminSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" siteMapFile="~/Areas/Admin/Mvc.Sitemap" securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" excludeAssembliesForScan="" attributesToIgnore="visibility" nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" /> </providers> </siteMap> 

and then using

 @Html.MvcSiteMap("AdminSiteMapProvider").Menu() 

But it does not work. Does anyone have the same problem ??????? Btw error:

 Could not find file 'P:\MVCTest\MvcSite1\MvcSite1\Mvc.sitemap'. 

It looks like they just ignore web.config

0
source share
1 answer

These options ignored when using v4. MvcSiteMapProvider no longer uses the Sitemap provider model for Microsoft, and the <siteMap> section can be completely removed from web.config.

To cope with the requirements for 2 Sitemaps in one application, you will need to use the dependency injection container and implement 1 or 2 user classes to map incoming HTTP requests to a specific instance of SiteMap.

Part of the DI can be handled by installing one of the packages MvcSiteMapProvider.MVC [x] .DI. [ContainerName].

ISiteMapCacheKeyGenerator provides the name of the "current" SiteMap based on the HTTP request, and ISiteMapCacheKeyToBuilderSetMapper tells MvcSiteMapProvider which constructor to use (which can be configured for an XML file or other source).

For more information on how to do this, see Multiple SiteMaps in a single application .

+1
source

Source: https://habr.com/ru/post/958660/


All Articles