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_5e314970f20640439ffb5d13085db678.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