page.NavigationNode.GetFullUrl() causing exception
Hi,
I am using PageManager to get a list of pages of a site.
Whenever I call page.NavigationNode.GetFullUrl() an exception is thrown:
IsolationLevel cannot be changed while connection is in use. openaccess
at OpenAccessRuntime.Relational.RelationalStorageManager.set_IsolationLevel(Nullable`1 value)
at Telerik.Sitefinity.Data.ReadUncommitedRegion..ctor(IManager manager)
at Telerik.Sitefinity.Multisite.MultisiteContext.SiteProxy.get_SiteMapName()
at Telerik.Sitefinity.Web.SiteMapBase.DynamicSiteMapKeyResolver.get_NodeKey()
at Telerik.Sitefinity.Web.SiteMapBase.FindSiteMapNodeFromKey(String key, Boolean ifAccessible)
at Telerik.Sitefinity.Modules.Pages.PageExtensions.GetSiteMapNode(PageNode page, SiteMapBase& sitemapProvider, CultureInfo culture)
at Telerik.Sitefinity.Modules.Pages.PageExtensions.GetUrl(PageNode page, Boolean backend, String paramString, CultureInfo culture, Boolean resolve)
at Telerik.Sitefinity.Modules.Pages.PageExtesnsions.GetFullUrl(PageNode pageNode, CultureInfo culture, Boolean fallbackToAnyLanguage, Boolean localizeUrl)
My code is like that:
MultisiteContext mc =
new
MultisiteContext();
ISite site = mc.CurrentSite;
// get the id of the root site
Guid rootId = site.SiteMapRootNodeId;
// get a page manager and get the root node
PageManager pageManager = PageManager.GetManager();
PageNode rootNode = pageManager.GetPageNode(rootId);
// get the pages
IQueryable<PageData> pages = pageManager.GetPageDataList().Where(pData => pData.Status == ContentLifecycleStatus.Live);
foreach
(var page
in
pages)
string
url = page.NavigationNode.GetFullUrl();
I am using Sitefinity 7.3. Did not have that problem with 7.1
Any ideas?
Hello Ludwig,
Could you please try the following code snippet for getting the PageData:
var multisiteContext = SystemManager.CurrentContext
as
MultisiteContext;
ISite site = multisiteContext.CurrentSite;
// get a page manager and get the root node
PageManager pageManager = PageManager.GetManager();
var rootNodeId = SiteInitializer.CurrentFrontendRootNodeId;
// get the pages
IQueryable<PageData> pages = pageManager.GetPageDataList()
.Where(pData => pData.Status == ContentLifecycleStatus.Live
&& pData.NavigationNode.RootNodeId == rootNodeId
&& !pData.NavigationNode.IsDeleted);
List<
string
> urls =
new
List<
string
>();
foreach
(var page
in
pages)
string
url = page.NavigationNode.GetFullUrl();
urls.Add(url);
That did it. Thanks.
Hello Ludwig,
Thank you for letting us know. I have marked the reply as an answer.
Regards,
Nikola Zagorchev
Telerik