Error executing template "Designs/Leander/_parsed/Index-b2c.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_81fd0e9bd3d64ca3b7bc9f791300d9aa.Execute() in D:\dynamicweb.net\Solutions\leander.cloud-dynamicweb-cms.com\Files\Templates\Designs\Leander\_parsed\Index-b2c.parsed.cshtml:line 95
   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 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 3 @Title("General page template") 4 @Description("General template for pages") 5 6 @using System.Web.Mvc; 7 @using Leander.Models; 8 @using Namotion.Reflection 9 @using Newtonsoft.Json; 10 11 @{ 12 var pageId = Model.ID; 13 14 var dwRequest = Dynamicweb.Context.Current.Request; 15 16 var _generalHelper = new Leander.Helpers.GeneralHelper(); 17 18 var redirectUrl = _generalHelper.GetRedirectionUrl(dwRequest?.RawUrl?.ToLower(), Model.Area.ID); 19 20 var contentType = Dynamicweb.Context.Current.Request.Headers.GetValues("Content-Type")?.FirstOrDefault(); 21 22 if (!string.IsNullOrWhiteSpace(redirectUrl) && contentType == null) 23 { 24 Dynamicweb.Context.Current.Response.Redirect(redirectUrl, true); 25 } 26 27 var _groupSerivce = new Leander.Services.GroupService(); 28 var _productService = new Leander.Services.ProductService(); 29 var _breadcrumbService = new Leander.Services.BreadcrumbService(); 30 var _userService = new Leander.Services.UserService(); 31 var _pageService = new Leander.Services.PageService(); 32 var token = ""; 33 var _isProduction = Dynamicweb.Configuration.SystemConfiguration.Instance.GetValue("/GlobalSettings/PicoPublishSettings/IsProduction")?.ToLower() == "true"; 34 35 var languages = new Dynamicweb.Ecommerce.International.LanguageService().GetLanguages(); 36 37 contentType = !string.IsNullOrWhiteSpace(contentType) ? contentType : !string.IsNullOrEmpty(dwRequest.QueryString["contenttype"]) ? dwRequest.QueryString["contenttype"] : "text/html"; 38 var renderAll = contentType == "text/html"; 39 40 // Check if parameters given to show settings, translations, navigation/menu and user 41 bool outputSettings = dwRequest.QueryString["settings"]?.ToString() == "1" || renderAll ? true : false; 42 bool outputTranslations = dwRequest.QueryString["translations"]?.ToString() == "1" || renderAll ? true : false; 43 bool outputMenu = dwRequest.QueryString["menu"]?.ToString() == "1" || renderAll ? true : false; 44 var languageId = languages.FirstOrDefault(x => x.Culture == Model.Languages?.FirstOrDefault(y => y.IsCurrent)?.Culture)?.LanguageId; 45 46 if (string.IsNullOrWhiteSpace(languageId)) 47 { 48 languageId = languages.FirstOrDefault(x => x.Culture == Model.Area.Languages?.FirstOrDefault(y => y.IsCurrent)?.Culture)?.LanguageId; 49 } 50 51 PageModel basePage = _pageService.GetPage(pageId, Model.Area.ID, languageId); 52 CategoryPageModel categoryPage = new CategoryPageModel(); 53 ProductPageModel productPage = new ProductPageModel(); 54 var pageJson = basePage; 55 56 basePage.Breadcrumbs = _breadcrumbService.GetBreadcrumbs(Model); 57 58 // Convert basepage to categorypage model 59 var json = JsonConvert.SerializeObject(basePage); 60 61 62 bool isCategoryPage = Model.ItemType == "CategoryPage" ? true : false; 63 bool isProductPage = Model.ItemType == "ProductPage" ? true : false; ; 64 65 if (Model.ItemType == "CategoryPage") 66 { 67 categoryPage = JsonConvert.DeserializeObject<CategoryPageModel>(json); 68 69 if (categoryPage != null) 70 { 71 var groupId = dwRequest.QueryString["GroupID"]; 72 if (!string.IsNullOrEmpty(groupId)) 73 { 74 Dynamicweb.Ecommerce.Products.Group group = new Dynamicweb.Ecommerce.Products.GroupService().GetGroup(groupId); 75 76 categoryPage.Category = _groupSerivce.GetLimitedGroupRelationModel(groupId, Model.Area.ID, languageId); 77 categoryPage.Products = _productService.GetProductList(groupId, Model.Area.ID, languageId, token, includeSubGroups: true); 78 79 categoryPage.Breadcrumbs = _breadcrumbService.GetBreadcrumbs(group, Model.Area, languageId); 80 categoryPage.B2CContent = _pageService.GetLandingPageContent(group, Model.Area.ID, languageId); 81 } 82 categoryPage.Alias = Model.ItemType; 83 } 84 85 pageJson = categoryPage; 86 } 87 if (Model.ItemType == "ProductPage") 88 { 89 productPage = JsonConvert.DeserializeObject<ProductPageModel>(json); 90 91 if (productPage != null && !string.IsNullOrWhiteSpace(Dynamicweb.Context.Current.Request["ProductID"])) 92 { 93 productPage.Product = _productService.GetProduct(Dynamicweb.Context.Current.Request["ProductID"], Model.Area.ID, languageId, token); 94 95 Dynamicweb.Ecommerce.Products.Product thisProduct = new Dynamicweb.Ecommerce.Products.ProductService().GetProductByNumber(productPage.Product.Number, "LANG1"); 96 97 productPage.Breadcrumbs = _breadcrumbService.GetBreadcrumbs(thisProduct, Model.Area, languageId); 98 } 99 100 pageJson = productPage; 101 } 102 103 104 var area = Model.Area; 105 106 // If page not found, just return 107 //if (page == null) { return; } 108 109 // TODO - Håndtering af forskellige side-itemtyper 110 111 var contentContainer = string.Empty; 112 var settingsJson = outputSettings == true ? new Leander.Services.SettingsService().GetSettings(Model.Area, languageId, pageId) : null; 113 var translationJson = outputTranslations == true ? new Leander.Services.TranslationService().GetTranslation(Model.Area) : null; 114 var menuJson = outputMenu == true ? new Leander.Services.MenuService().GetNavigationObject(Model) : null; 115 116 PageObjectModel pageObject = new PageObjectModel() 117 { 118 Page = pageJson, 119 Settings = settingsJson, 120 Translations = translationJson, 121 Menu = menuJson, 122 AreaId = Model.Area.ID.ToString(), 123 RedirectUrl = redirectUrl 124 }; 125 126 var finalJson = _generalHelper.JsonIndexSerialize(pageObject); 127 128 switch (Model.ItemType) 129 { 130 case "HomePage": 131 case "ContentPage": 132 contentContainer = finalJson; 133 break; 134 135 case "CategoryPage": 136 //dynamic moduleContent = Newtonsoft.Json.JsonConvert.DeserializeObject(Model.Content["DEFAULT"]); 137 138 //contentContainer = moduleContent; 139 contentContainer = finalJson; 140 141 break; 142 143 case "ProductPage": 144 contentContainer = finalJson; 145 146 break; 147 148 case "CartPage": 149 contentContainer = finalJson; 150 break; 151 152 default: 153 contentContainer = finalJson; 154 break; 155 } 156 157 Pageview.Page.ContentType = "text/html"; 158 159 if (basePage.Alias == "404Page") 160 { 161 Dynamicweb.Context.Current.Response.StatusCode = 404; 162 } 163 } 164 165 @if (contentType == "application/json") 166 { 167 @contentContainer 168 } 169 else 170 { 171 <html> 172 <head> 173 <meta charset="utf-8" /> 174 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 175 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> 176 177 <title>@pageObject.Page.Title</title> 178 <meta name="description" content="@pageObject.Page.Description" /> 179 <meta name="og:title" content="@pageObject.Page.SchemaTitle" /> 180 <meta name="og:description" content="@pageObject.Page.SchemaDescription" /> 181 <meta name="og:image" content="@pageObject.Page.SchemaImage" /> 182 183 @if (!string.IsNullOrWhiteSpace(Model.MetaTags)) 184 { 185 @Model.MetaTags 186 } 187 188 <link rel="canonical" href="@pageObject.Page.Canonical" /> 189 190 <script defer="defer" src="@_generalHelper.RenderPath("main.js", true)"></script> 191 <link href="@_generalHelper.RenderPath("main.css", true)" rel="stylesheet"> 192 193 @if (_isProduction) 194 { 195 <!-- Google Tag Manager --> 196 <script> 197 (function (w, d, s, l, i) { 198 w[l] = w[l] || []; w[l].push({ 199 'gtm.start': 200 new Date().getTime(), event: 'gtm.js' 201 }); var f = d.getElementsByTagName(s)[0], 202 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 203 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 204 })(window, document, 'script', 'dataLayer', 'GTM-5T6WVLK');</script> 205 <!-- End Google Tag Manager --> 206 } 207 else{ 208 <!-- Google Tag Manager --> 209 <script> 210 (function (w, d, s, l, i) { 211 w[l] = w[l] || []; w[l].push({ 212 'gtm.start': 213 new Date().getTime(), event: 'gtm.js' 214 }); var f = d.getElementsByTagName(s)[0], 215 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 216 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 217 })(window, document, 'script', 'dataLayer', 'GTM-M5NSLCZH');</script> 218 <!-- End Google Tag Manager --> 219 } 220 221 </head> 222 <body> 223 224 @if (_isProduction) 225 { 226 <!-- Google Tag Manager (noscript) --> 227 <noscript> 228 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5T6WVLK" 229 height="0" width="0" style="display:none;visibility:hidden"></iframe> 230 </noscript> 231 <!-- End Google Tag Manager (noscript) --> 232 } 233 else{ 234 <!-- Google Tag Manager (noscript) --> 235 <noscript> 236 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M5NSLCZH" 237 height="0" width="0" style="display:none;visibility:hidden"></iframe> 238 </noscript> 239 <!-- End Google Tag Manager (noscript) --> 240 } 241 242 <div id="root"></div> 243 <script id="data-script"> 244 var pageContent = @contentContainer; 245 </script> 246 247 </body> 248 </html> 249 } 250