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