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_d052a7c314534e7fa3e52955d7aa0bab.Execute() in D:\dynamicweb.net\Solutions\leander.cloud-dynamicweb-cms.com\Files\Templates\Designs\Leander\_parsed\Index-b2c.parsed.cshtml:line 98
   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 var landingPageContent = _pageService.GetLandingPageContent(group, Model.Area.ID, languageId); 77 78 categoryPage.Category = _groupSerivce.GetLimitedGroupRelationModel(groupId, Model.Area.ID, languageId); 79 categoryPage.Products = _productService.GetProductList(groupId, Model.Area.ID, languageId, token, includeSubGroups: true); 80 81 categoryPage.Breadcrumbs = _breadcrumbService.GetBreadcrumbs(group, Model.Area, languageId); 82 categoryPage.B2CContent = landingPageContent; 83 categoryPage.B2CShowProductGrid = group.ProductGroupFieldValues.GetProductGroupFieldValue("B2CShowProductGrid").HasValue && landingPageContent.Any() ? Convert.ToBoolean(group.ProductGroupFieldValues.GetProductGroupFieldValue("B2CShowProductGrid")?.Value.ToString()) : false; 84 } 85 categoryPage.Alias = Model.ItemType; 86 } 87 88 pageJson = categoryPage; 89 } 90 if (Model.ItemType == "ProductPage") 91 { 92 productPage = JsonConvert.DeserializeObject<ProductPageModel>(json); 93 94 if (productPage != null && !string.IsNullOrWhiteSpace(Dynamicweb.Context.Current.Request["ProductID"])) 95 { 96 productPage.Product = _productService.GetProduct(Dynamicweb.Context.Current.Request["ProductID"], Model.Area.ID, languageId, token); 97 98 Dynamicweb.Ecommerce.Products.Product thisProduct = new Dynamicweb.Ecommerce.Products.ProductService().GetProductByNumber(productPage.Product.Number, "LANG1"); 99 100 productPage.Breadcrumbs = _breadcrumbService.GetBreadcrumbs(thisProduct, Model.Area, languageId); 101 } 102 103 pageJson = productPage; 104 } 105 106 107 var area = Model.Area; 108 109 // If page not found, just return 110 //if (page == null) { return; } 111 112 // TODO - Håndtering af forskellige side-itemtyper 113 114 var contentContainer = string.Empty; 115 var settingsJson = outputSettings == true ? new Leander.Services.SettingsService().GetSettings(Model.Area, languageId, pageId) : null; 116 var translationJson = outputTranslations == true ? new Leander.Services.TranslationService().GetTranslation(Model.Area) : null; 117 var menuJson = outputMenu == true ? new Leander.Services.MenuService().GetNavigationObject(Model) : null; 118 119 PageObjectModel pageObject = new PageObjectModel() 120 { 121 Page = pageJson, 122 Settings = settingsJson, 123 Translations = translationJson, 124 Menu = menuJson, 125 AreaId = Model.Area.ID.ToString(), 126 RedirectUrl = redirectUrl 127 }; 128 129 var finalJson = _generalHelper.JsonIndexSerialize(pageObject); 130 131 switch (Model.ItemType) 132 { 133 case "HomePage": 134 case "ContentPage": 135 contentContainer = finalJson; 136 break; 137 138 case "CategoryPage": 139 //dynamic moduleContent = Newtonsoft.Json.JsonConvert.DeserializeObject(Model.Content["DEFAULT"]); 140 141 //contentContainer = moduleContent; 142 contentContainer = finalJson; 143 144 break; 145 146 case "ProductPage": 147 contentContainer = finalJson; 148 149 break; 150 151 case "CartPage": 152 contentContainer = finalJson; 153 break; 154 155 default: 156 contentContainer = finalJson; 157 break; 158 } 159 160 Pageview.Page.ContentType = "text/html"; 161 162 if (basePage.Alias == "404Page") 163 { 164 Dynamicweb.Context.Current.Response.StatusCode = 404; 165 } 166 } 167 168 @if (contentType == "application/json") 169 { 170 @contentContainer 171 } 172 else 173 { 174 <html> 175 <head> 176 <meta charset="utf-8" /> 177 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 178 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> 179 180 <title>@pageObject.Page.Title</title> 181 <meta name="description" content="@pageObject.Page.Description" /> 182 <meta name="og:title" content="@pageObject.Page.SchemaTitle" /> 183 <meta name="og:description" content="@pageObject.Page.SchemaDescription" /> 184 <meta name="og:image" content="@pageObject.Page.SchemaImage" /> 185 186 @if (!string.IsNullOrWhiteSpace(Model.MetaTags)) 187 { 188 @Model.MetaTags 189 } 190 191 <link rel="canonical" href="@pageObject.Page.Canonical" /> 192 193 <script defer="defer" src="@_generalHelper.RenderPath("main.js", true)"></script> 194 <link href="@_generalHelper.RenderPath("main.css", true)" rel="stylesheet"> 195 196 @if (_isProduction) 197 { 198 <!-- Google Tag Manager --> 199 <script> 200 (function (w, d, s, l, i) { 201 w[l] = w[l] || []; w[l].push({ 202 'gtm.start': 203 new Date().getTime(), event: 'gtm.js' 204 }); var f = d.getElementsByTagName(s)[0], 205 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 206 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 207 })(window, document, 'script', 'dataLayer', 'GTM-5T6WVLK');</script> 208 <!-- End Google Tag Manager --> 209 } 210 else{ 211 <!-- Google Tag Manager --> 212 <script> 213 (function (w, d, s, l, i) { 214 w[l] = w[l] || []; w[l].push({ 215 'gtm.start': 216 new Date().getTime(), event: 'gtm.js' 217 }); var f = d.getElementsByTagName(s)[0], 218 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 219 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 220 })(window, document, 'script', 'dataLayer', 'GTM-M5NSLCZH');</script> 221 <!-- End Google Tag Manager --> 222 } 223 224 </head> 225 <body> 226 227 @if (_isProduction) 228 { 229 <!-- Google Tag Manager (noscript) --> 230 <noscript> 231 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5T6WVLK" 232 height="0" width="0" style="display:none;visibility:hidden"></iframe> 233 </noscript> 234 <!-- End Google Tag Manager (noscript) --> 235 } 236 else{ 237 <!-- Google Tag Manager (noscript) --> 238 <noscript> 239 <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M5NSLCZH" 240 height="0" width="0" style="display:none;visibility:hidden"></iframe> 241 </noscript> 242 <!-- End Google Tag Manager (noscript) --> 243 } 244 245 <div id="root"></div> 246 <script id="data-script"> 247 var pageContent = @contentContainer; 248 </script> 249 250 </body> 251 </html> 252 } 253