Error executing template "Designs/ncnielsen/eCom/Productlist/subgrouplist.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_bde5ed990052474aba53f1955f30834d.<>c__DisplayClass0_0.<GetLevel1GroupName>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Gotcha\ncn.dw9.dynamicweb-cms.com\files\Templates\Designs\ncnielsen\eCom\Productlist\subgrouplist.cshtml:line 184 at CompiledRazorTemplates.Dynamic.RazorEngine_bde5ed990052474aba53f1955f30834d.<>c__DisplayClass0_0.<GetLevel1GroupName>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\Gotcha\ncn.dw9.dynamicweb-cms.com\files\Templates\Designs\ncnielsen\eCom\Productlist\subgrouplist.cshtml:line 189 at RazorEngine.Templating.TemplateWriter.ToString() at CompiledRazorTemplates.Dynamic.RazorEngine_bde5ed990052474aba53f1955f30834d.Execute() in D:\dynamicweb.net\Solutions\Gotcha\ncn.dw9.dynamicweb-cms.com\files\Templates\Designs\ncnielsen\eCom\Productlist\subgrouplist.cshtml:line 162 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @using System.Text.RegularExpressions 2 @using System.Web 3 4 @{ 5 string logoName = ""; 6 string logoAlt = ""; 7 string subgroupStartPath = ""; 8 9 Dynamicweb.Ecommerce.Products.GroupService gs = new Dynamicweb.Ecommerce.Products.GroupService(); 10 Dynamicweb.Ecommerce.Products.Group g = gs.GetGroup(GetString("Ecom:Group.ID")); 11 Dynamicweb.Ecommerce.Products.GroupCollection gc = g.ParentGroups; 12 13 if (GetLoop("Subgroups").Count() > 0) 14 { 15 /*logoName = GetLoop("Subgroups")[0].GetString("Ecom:Group.Name").Replace(" ","_");*/ 16 logoName = gc[0].Name.Replace(" ", "_"); 17 18 if (logoName.IndexOf("_") != -1) 19 { 20 logoName = logoName.Substring(0, logoName.IndexOf("_")).ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 21 subgroupStartPath = logoName + "_"; 22 logoAlt = logoName + " logo"; 23 logoName = logoName.ToLower() + "_white"; 24 logoName = logoName + ".png"; 25 } 26 else 27 { 28 logoName = logoName.ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 29 subgroupStartPath = logoName + "_"; 30 logoAlt = logoName + " logo"; 31 logoName = logoName.ToLower() + "_white"; 32 logoName = logoName + ".png"; 33 } 34 } 35 } 36 @SnippetStart("TemplateSpecificHeader") 37 <div class="content"> 38 @if (logoName != "") 39 { 40 if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath("/files/images/ncnielsen/ecom/logos/" + logoName))) 41 { 42 <img id="brandlogo" src='/files/images/ncnielsen/ecom/logos/@logoName' alt='@logoAlt' /> 43 } 44 } 45 <h1>@GetString("Ecom:Group.Name")</h1><span class="subheader">@GetString("Ecom:Group. ")</span> 46 </div><div id="headerImage"> 47 @{ 48 string headerImagefolderName = GetString("Ecom:Group.Name").ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 49 string headerImagePath = "/files/images/ncnielsen/ecom/groups/" + subgroupStartPath + "" + headerImagefolderName + "/header.jpg"; 50 51 <img src='@headerImagePath' alt='@GetString("Ecom:Group.Name")' /> 52 } 53 </div> 54 @SnippetEnd("TemplateSpecificHeader") 55 56 <section class="section section-white section-product-list"> 57 <div class="content"> 58 <div class="filter-bar"> 59 @RenderNavigation(new 60 { 61 template = "ecom-filtering.xslt", 62 expandmode = "all", 63 id = "ecomFiltering", 64 startlevel = "1", 65 endlevel = "5" 66 }) 67 </div><ul id="productList"> 68 @if (GetLoop("Subgroups").Count > 0) 69 { 70 foreach (var ecomSubGroup in GetLoop("Subgroups")) 71 { 72 string folderName = ecomSubGroup.GetString("Ecom:Group.Name").ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 73 string imagePath = "/files/images/ncnielsen/ecom/groups/" + folderName + "/list.jpg"; 74 string link = ecomSubGroup.GetString("Ecom:Group.Link.Clean"); 75 76 if (!string.IsNullOrWhiteSpace(ecomSubGroup.GetString("Ecom:Group:Field.ShadowGroupLink"))) 77 { 78 link = ecomSubGroup.GetString("Ecom:Group:Field.ShadowGroupLink"); 79 } 80 81 <li class="product"> 82 <a href="@link"> 83 <img src='@imagePath' alt='@ecomSubGroup.GetString("Ecom:Group.Name")' /><h2>@ecomSubGroup.GetString("Ecom:Group.Name")</h2> 84 @if (!string.IsNullOrWhiteSpace(ecomSubGroup.GetString("Ecom:Group:Field.ListeLabel"))) 85 { 86 <p>@ecomSubGroup.GetString("Ecom:Group:Field.ListeLabel"): @ecomSubGroup.GetString("Ecom:Group:Field.ListeVaerdi.Value")</p> 87 } 88 </a> 89 </li> 90 } 91 } 92 else 93 { 94 string folderName = GetString("Ecom:Group.Name").ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "ae").Replace("ø", "oe").Replace("å", "aa"); 95 string imagePath = "/files/images/ncnielsen/ecom/groups/" + folderName + "/list.jpg"; 96 string link = GetString("Ecom:Group.Link.Clean"); 97 98 if (!string.IsNullOrWhiteSpace(GetString("Ecom:Group:Field.ShadowGroupLink"))) 99 { 100 link = GetString("Ecom:Group:Field.ShadowGroupLink"); 101 } 102 103 <li class="product"> 104 <a href="@link"> 105 <img src='@imagePath' alt='@GetString("Ecom:Group.Name")' /><h2>@GetString("Ecom:Group.Name")</h2> 106 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Group:Field.ListeLabel"))) 107 { 108 <p>@GetString("Ecom:Group:Field.ListeLabel"): @GetString("Ecom:Group:Field.ListeVaerdi.Value")</p> 109 } 110 </a> 111 </li> 112 } 113 </ul> 114 </div> 115 </section> 116 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Group:Field.Headline"))) 117 { 118 <section class="section section-greyextralight section-group-text"> 119 <div class="content"> 120 <h2><span><span>@GetString("Ecom:Group:Field.Headline")</span></span></h2> 121 @GetString("Ecom:Group.Description") 122 </div> 123 </section> 124 } 125 126 127 @SnippetStart("JSONLD") 128 <script type="application/ld+json"> 129 { 130 "@@type": "ItemList", 131 "itemListElement": [ 132 @if (GetLoop("Subgroups").Count > 0) 133 { 134 int counter = 0; 135 136 foreach (var ecomSubGroup in GetLoop("Subgroups")) 137 { 138 counter++; 139 string folderName = ecomSubGroup.GetString("Ecom:Group.Name").ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 140 string imagePath = $"https://{HttpContext.Current.Request.Url.Host}/files/images/ncnielsen/ecom/groups/{folderName}/list.jpg"; 141 Dynamicweb.Ecommerce.Products.Group g1 = gs.GetGroup(ecomSubGroup.GetString("Ecom:Group.ID")); 142 string parentGroupName = GetLevel1GroupName(g1).ToString(); 143 144 <text> 145 { 146 "@@type": "Product", 147 "name": "@GetString("Ecom:Group.Name")", 148 "image": "@imagePath", 149 "description": "@StripHtml(ecomSubGroup.GetString("Ecom:Group.Description"))", 150 "sku": "@ecomSubGroup.GetString("Ecom:Group.ID")", 151 "brand": { 152 "@@type": "Brand", 153 "name": "@parentGroupName" 154 } 155 } 156 </text> if (counter < GetLoop("Subgroups").Count){<text>,</text>} 157 } 158 } else { 159 string folderName = GetString("Ecom:Group.Name").ToLower().Replace(" ", "_").Replace("/", "_").Replace("æ", "a").Replace("ø", "o").Replace("å", "a"); 160 string imagePath = $"https://{HttpContext.Current.Request.Url.Host}/files/images/ncnielsen/ecom/groups/{folderName}/list.jpg"; 161 Dynamicweb.Ecommerce.Products.Group g2 = gs.GetGroup(GetString("Ecom:Group.ID")); 162 string parentGroupName = GetLevel1GroupName(g2).ToString(); 163 164 <text> 165 { 166 "@@type": "Product", 167 "name": "@GetString("Ecom:Group.Name")", 168 "image": "@imagePath", 169 "description": "@StripHtml(GetString("Ecom:Group.Description"))", 170 "sku": "@GetString("Ecom:Group.ID")", 171 "brand": { 172 "@@type": "Brand", 173 "name": "@parentGroupName" 174 } 175 } 176 </text> 177 } 178 ] 179 } 180 </script> 181 @SnippetEnd("JSONLD") 182 183 @helper GetLevel1GroupName (Dynamicweb.Ecommerce.Products.Group g) { 184 if (string.IsNullOrWhiteSpace(g.PrimaryParentGroupId)) { 185 @g.Name 186 } else { 187 Dynamicweb.Ecommerce.Products.GroupService gs2 = new Dynamicweb.Ecommerce.Products.GroupService(); 188 Dynamicweb.Ecommerce.Products.Group pg = gs2.GetGroup(g.PrimaryParentGroupId); 189 @GetLevel1GroupName(pg) 190 } 191 } 192 193 @helper StripHtml(string input) 194 { 195 if (string.IsNullOrEmpty(input)) 196 { 197 return; 198 } 199 200 // 1. Remove HTML tags 201 string noHtml = Regex.Replace(input, "<.*?>", string.Empty); 202 203 // 2. Decode HTML entities (e.g. & → &) 204 string decoded = HttpUtility.HtmlDecode(noHtml); 205 206 // 3. Remove line breaks, tabs, and excess spaces 207 string cleaned = Regex.Replace(decoded, @"\s+", " ").Trim(); 208 209 // Output the cleaned string 210 @cleaned 211 }


















