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