Developer forum

Forum » Templates » Get TopPageID in Razor

Get TopPageID in Razor

Finn Frost
Reply

How do i retrieve the TopPageID in RazorTemplates?

I am able to get the PageID like this:

@Pageview.Page.ID

 

BR
Finn Frost


Replies

 
Finn Frost
Reply

I need it because i want to add some logic, to set a specific class attribute value, based on which main-menu(top-level-page) is selected.

Here is my template(for a news list), but the line where i try to get the top page id causes an error (incorrect way to get it!):

@{
	string topPageCssClass = "varme";//string.Empty;
	
	int pageId = 0;
	int.TryParse(GetValue("Global:Page.Top.ID").ToString(), out pageId);
	if(pageId == 0){ // This is the top page - get ID from page.
		pageId = Pageview.Page.ID;
	}

	switch(pageId){
		case 2:
			topPageCssClass = "affald";
		break;
		case 3:
			topPageCssClass = "vand";
		break;
		case 4:
			topPageCssClass = "spildevand";
		break;
		case 5:
			topPageCssClass = "varme";
		break;
		case 6:
			topPageCssClass = "kunde";
		break;

		default:
		break;
	}
}
<script type="text/javascript">
	console.log("Id: @pageId");
</script>

<div class="didYouKnowWrapper @topPageCssClass">
<div class="header @topPageCssClass"><h4>@GetValue("ParagraphHeader")</h4></div>
	<div class="didYouKnowContent">
		@GetValue("ParagraphModule")
	</div>
</div>

 

 
Finn Frost
Reply

I had to make the template work today, so i managed to convert the template to html, and achieve the same functionality.
The (Html)template below, and the (Razor)template in my previous comment, does excatly the same, however, i believe the Razor template is more readable, maintainable and of course less code!.


<!--@If Defined(DwTopPageID)-->
	
	<!--@If(DwTopPageID=2)-->
		<div class="didYouKnowWrapper afflad">
		<div class="header affald"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwTopPageID=3)-->
		<div class="didYouKnowWrapper vand">
		<div class="header vand"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwTopPageID=4)-->
		<div class="didYouKnowWrapper spildevand">
		<div class="header spildevand"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwTopPageID=5)-->
		<div class="didYouKnowWrapper varme">
		<div class="header varme"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwTopPageID=6)-->
		<div class="didYouKnowWrapper kunde">
		<div class="header kunde"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->

<!--@EndIf(DwTopPageID)-->

<!--@If Not Defined(DwTopPageID)-->
	
	<!--@If(DwPageID=2)-->
		<div class="didYouKnowWrapper afflad">
		<div class="header affald"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwPageID=3)-->
		<div class="didYouKnowWrapper vand">
		<div class="header vand"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwPageID=4)-->
		<div class="didYouKnowWrapper spildevand">
		<div class="header spildevand"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwPageID=5)-->
		<div class="didYouKnowWrapper varme">
		<div class="header varme"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->
    <!--@If(DwPageID=6)-->
		<div class="didYouKnowWrapper kunde">
		<div class="header kunde"><h4><!--@ParagraphHeader--></h4></div>
	<!--@EndIf-->

<!--@EndIf(DwTopPageID)-->

   <div class="didYouKnowContent">
		<!--@ParagraphModule-->
	</div>
</div>

Although, it would still be nice to know how to get the TopPageID in Razor templates.

Best regards

Finn Frost

 
Morten Bengtson
Reply

This is ugly, but it works :)

 

@using Dynamicweb;
@using Dynamicweb.Frontend;
@using Dynamicweb.Rendering;
@using System.Collections;
@model RazorTemplateModel<Template>

@functions {

	int GetTopPageID() {
		var topPageId = 0;
		
		var pagePath = Pageview.Page.get_Value("pagepath") as ArrayList;
		if (pagePath != null && pagePath.Count > 0)
		{
			var topPage = Pageview.PageCollection[pagePath[0]] as Page;
			topPageId = Base.ChkInteger(topPage.get_Value("PageID"));
		}
		
		return topPageId;
	}
}

@{
	@ViewBag.TopPageID = GetTopPageID();
}

<div>@ViewBag.TopPageID</div>

 

You must be logged in to post in the forum