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