Error executing template "Designs/OlgerdinVefverslun/_parsed/Frontpage_ViteBridge.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_ba05f7fc9e3b40fd8cb7034a16bc3581.GetPageStyles() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 293
   at CompiledRazorTemplates.Dynamic.RazorEngine_ba05f7fc9e3b40fd8cb7034a16bc3581.Execute() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 282
   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 @using Advania.FileSystem; 3 @using Advania.Ecommerce.Infrastructure.Vite; 4 @using Advania.Configuration; 5 @using Advania.Custom; 6 @using Dynamicweb; 7 @using Advania.Users.UserManagement; 8 @using Advania.Users.UserManagement.Extensions; 9 @using Dynamicweb.Security.UserManagement; 10 11 @{ 12 var vite = new ViteService(new ViteConfig(Files.GetRelativePath(ConfigManager.General.ViteManifestPath)) 13 { 14 ModuleSrc = ConfigManager.General.ViteModuleSrc, 15 PublicPath = ConfigManager.General.VitePublicPath 16 }); 17 18 var useViteLocalModule = ConfigManager.Env == AppEnvEnum.Development; 19 20 var contextAttributes = new Dictionary<string, object>() { 21 { "area-id", Model.Area.ID }, 22 { "area-name", Model.Area.Name }, 23 { "shop-id", Dynamicweb.Content.Services.Areas.GetArea(Model.Area.ID).EcomShopId }, 24 { "page-id", Model.ID }, 25 { "home-page-id", Model.Area.FirstActivePage.ID }, 26 { "user-feed-page-id", GetPageIdByNavigationTag("GetUserFeed") }, 27 { "cart-feed-page-id", GetPageIdByNavigationTag("CartFeed") }, 28 { "my-pages-page-id", GetPageIdByNavigationTag("MyPages") }, 29 { "login-page-id", GetPageIdByNavigationTag("LoginPage") }, 30 { "register-page-id", GetPageIdByNavigationTag("RegisterPage") }, 31 { "register-company-page-id", GetPageIdByNavigationTag("RegisterCompanyPage") }, 32 { "product-search-page-id", GetPageIdByNavigationTag("ProductSearch") }, 33 { "active-search-context-page-id", null }, 34 { "product-typeahead-page-id", GetPageIdByNavigationTag("ProductTypeaheadSearch") }, 35 { "company-invite-page-id", GetPageIdByNavigationTag("CompanyInvitePage") }, 36 { "secondary-users-feed-page-id", GetPageIdByNavigationTag("SecondaryUsersFeed") }, 37 { "customer-center-list-feed-page-id", GetPageIdByNavigationTag("CustomerCenterListFeed") }, 38 { "translations-timestamp", new System.IO.FileInfo(Files.GetTemplatePath("OlgerdinVefverslun", "Translations.xml")).LastWriteTimeUtc.ToString("o") } 39 }; 40 41 var pageIndex = new Dictionary<string, string>() 42 { 43 { "ProductFeedPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("ProductFeedPage")) }, 44 { "LiveFeedPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("LiveFeedPage")) }, 45 { "BrandPage", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("BrandPage")) }, 46 { "ProductSearch", Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("ProductSearch")) } 47 }; 48 49 if (Model.CurrentUser != null) 50 { 51 contextAttributes["current-user-id"] = Model.CurrentUser.ID; 52 } 53 54 if (Model.Cart != null) 55 { 56 contextAttributes["current-cart-id"] = Model.Cart.ID; 57 } 58 59 var subAreaPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID); 60 if (subAreaPage.ItemType == "Advania_Sub_Area") 61 { 62 contextAttributes["sub-area-name"] = subAreaPage.GetDisplayName(); 63 64 if (subAreaPage.Item.TryGetValue("Brand_Page", out object brandPage)) 65 { 66 var brandPageId = Dynamicweb.Environment.Helpers.LinkHelper.GetInternalPageId(brandPage.ToString()); 67 pageIndex["BrandPage"] = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(brandPageId); 68 } 69 /* 70 contextAttributes["active-search-context-page-id"] = Convert.ToInt32(activeSearchContextPage); 71 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId; 72 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId; 73 */ 74 } 75 76 /* This loop enables us to have specific page IDs to use for product search & typeahead functionality. It's used to solve */ 77 /* Danól being split into 3 departments, each with their own subpage which needs to have its search isolated to their */ 78 /* specific products. */ 79 if (Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser() is User user) 80 { 81 var contextSearchPages = Model.Area.Item?.GetItems("Context_Search_Pages"); 82 83 if (contextSearchPages != null) 84 { 85 foreach (var item in contextSearchPages) 86 { 87 var userGroupContext = item.GetRawValue("User_Group_Context"); 88 if (user.GroupsIds.Contains(Dynamicweb.Core.Converter.ToInt32(userGroupContext))) 89 { 90 var contextSearchPageId = item.GetLink("Search_Page"); 91 if (contextSearchPageId != null && contextSearchPageId.PageId != 0) 92 { 93 contextAttributes["active-search-context-page-id"] = contextSearchPageId.PageId; 94 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId; 95 } 96 97 var contextTypeaheadSearchPageId = item.GetLink("Typeahead_Page"); 98 if (contextTypeaheadSearchPageId != null && contextTypeaheadSearchPageId.PageId != 0) 99 { 100 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId; 101 } 102 break; 103 } 104 } 105 } 106 } 107 108 109 var myProductsPageId = GetPageIdByNavigationTag("MyProducts"); 110 if (myProductsPageId > 0) 111 { 112 var myProductsPage = Dynamicweb.Content.Services.Pages.GetPage(myProductsPageId); 113 if (myProductsPage != null && Dynamicweb.Frontend.SecurityHandler.IsCurrentUserAllowed(myProductsPage)) 114 { 115 contextAttributes["my-products-page-id"] = myProductsPageId; 116 } 117 } 118 119 var shopContext = Model.Area.Name.ToLower().Contains("danol") ? ShopContext.Danol : ShopContext.Olgerdin; 120 contextAttributes["repository-name"] = shopContext == ShopContext.Olgerdin ? "Products" : "DanolShop"; 121 contextAttributes["query-name"] = "Products"; 122 123 if (Model.Area.Item != null) 124 { 125 contextAttributes["service-desk-email"] = Model.Area.Item.GetString("Email"); 126 contextAttributes["service-desk-phone"] = Model.Area.Item.GetString("PhoneNumber"); 127 } 128 129 var contextAttributesFormatted = string.Join(" ", contextAttributes.Select(attr => string.Format("{0}='{1}'", attr.Key, attr.Value))); 130 131 if (!Model.IsCurrentUserAllowed) 132 { 133 System.Web.HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + GetPageIdByNavigationTag("LoginPage")); 134 } 135 136 var googleTagManagerID = Model.Area.Item?.GetString("Google_Tag_Manager_ID"); 137 138 139 /* Restores ability to set background image from Website settings which Ölgerðin & Danól use for Holidaythemes */ 140 var layoutStyles = ""; 141 if (Model.Area.Item != null) 142 { 143 144 var styles = new Dictionary<string, string>(); 145 var image = Model.Area.Item.GetString("Background_Image"); 146 if (!string.IsNullOrWhiteSpace(image)) 147 { 148 styles.Add("background-image", string.Format("url('{0}')", image)); 149 } 150 var backgroundSize = Model.Area.Item.GetString("Background_Image_Size"); 151 if (!string.IsNullOrWhiteSpace(backgroundSize)) 152 { 153 styles.Add("background-size", backgroundSize); 154 } 155 156 var backgroundRepeat = Model.Area.Item.GetString("Background_Image_Repeat"); 157 if (!string.IsNullOrWhiteSpace(backgroundRepeat)) 158 { 159 styles.Add("background-repeat", backgroundRepeat); 160 } 161 162 layoutStyles = string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray()); 163 } 164 165 var toast = ""; 166 var toastType = "success"; 167 168 var janusLoginResults = System.Web.HttpContext.Current.Session["Janus_Activation_Success"]; 169 if (janusLoginResults != null && Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser() != null) 170 { 171 System.Web.HttpContext.Current.Session.Remove("Janus_Activation_Success"); 172 toast = Translate("Rafræn skilríki hafa verið virkjuð"); 173 } 174 175 var globalPopup = GetPageIdByNavigationTag("GlobalPopup"); 176 177 } 178 179 <!DOCTYPE html> 180 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 181 <head> 182 <meta charset="utf-8" /> 183 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 184 <meta name="PageID" value="@Model.ID" /> 185 @Model.MetaTags 186 187 @if (!string.IsNullOrWhiteSpace(googleTagManagerID)) 188 { 189 <script> 190 (function (w, d, s, l, i) { 191 w[l] = w[l] || []; w[l].push({ 192 'gtm.start': 193 new Date().getTime(), event: 'gtm.js' 194 }); var f = d.getElementsByTagName(s)[0], 195 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true 196 ; j.defer = true; j.src = 197 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 198 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)'); 199 </script> 200 } 201 <title>@Model.Title - @(shopContext == ShopContext.Olgerdin ? "Ölgerðin Egill Skallagrímsson" : "Danól") </title> 202 <style> 203 [v-cloak] { 204 display: none; 205 } 206 </style> 207 <link rel="shortcut icon" type="image/x-icon" href="@Model.Area.Item.GetString("Favicon")" /> 208 209 @* Legacy scripts *@ 210 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/Prod_Jquery-3.3.1.js" defer></script> 211 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/owl.carousel.min.js" defer></script> 212 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/typeahead-0.11.1.js" defer></script> 213 @if (useViteLocalModule) 214 { 215 @vite.RenderModuleAssets() 216 } 217 else 218 { 219 @vite.RenderManifestAssets() 220 } 221 222 @* Enable injecting scripts/styles for further down in DW Template renderer, see Files\Templates\eCom7\CheckoutHandler\Borgun3D\Post\Post.cshtml *@ 223 @RenderSnippet("MasterHeadEnd") 224 </head> 225 226 <body class="theme theme--@shopContext.ToString().ToLower() scrollbar scrollbar--thick"> 227 @{ 228 var cacheHit = System.Runtime.Caching.MemoryCache.Default.Get("RUID"); 229 if (cacheHit != null) 230 { 231 var ruidInCache = (string)cacheHit; 232 233 if (!string.IsNullOrWhiteSpace(ruidInCache)) 234 { 235 <input type="hidden" id="RUID" value="@ruidInCache" /> 236 System.Runtime.Caching.MemoryCache.Default.Remove("RUID"); 237 } 238 } 239 if (Model.CurrentUser != null) 240 { 241 <input type="hidden" id="UserId" value="@Model.CurrentUser.ID" /> 242 } 243 } 244 @if (!string.IsNullOrWhiteSpace(googleTagManagerID)) 245 { 246 <noscript> 247 <iframe src="https://www.googletagmanager.com/ns.html?id=@(googleTagManagerID)" 248 height="0" width="0" style="display:none;visibility:hidden"></iframe> 249 </noscript> 250 } 251 <div id="app" v-cloak> 252 <nav-provider :page-index='@Newtonsoft.Json.JsonConvert.SerializeObject(pageIndex)'> 253 <dynamicweb-context-provider @contextAttributesFormatted> 254 <nav-scroll-top-button></nav-scroll-top-button> 255 <web-chat-button></web-chat-button> 256 @Navigation.RenderNavigation("Navigation/Navbar.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 257 { 258 StartLevel = 1, 259 StopLevel = 99, 260 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All 261 }) 262 263 @{ 264 var topPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID); 265 var renderMegamenu = topPage.NavigationTag.Contains("Megamenu"); 266 267 if (renderMegamenu) 268 { 269 <div class="legacy"> 270 <div class="megamenu-desktop"> 271 @Navigation.RenderNavigation("Navigation/Megamenu.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 272 { 273 StartLevel = 2, 274 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All, 275 RootPageId = topPage.ID 276 }) 277 </div> 278 </div> 279 } 280 } 281 282 <layout-master @(renderMegamenu ? "megamenu" : "") style="@layoutStyles"> 283 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 284 285 286 287 @functions 288 { 289 string GetPageStyles() 290 { 291 var styles = new Dictionary<string, string>(); 292 293 var image = Model.PropertyItem.GetString("Background_Image"); 294 if (!string.IsNullOrWhiteSpace(image)) 295 { 296 styles.Add("background-image", string.Format("url('{0}')", image)); 297 } 298 var backgroundSize = Model.PropertyItem.GetString("Background_Image_Size"); 299 if (!string.IsNullOrWhiteSpace(backgroundSize)) 300 { 301 styles.Add("background-size", backgroundSize); 302 } 303 304 var backgroundRepeat = Model.PropertyItem.GetString("Background_Image_Repeat"); 305 if (!string.IsNullOrWhiteSpace(backgroundRepeat)) 306 { 307 styles.Add("background-repeat", backgroundRepeat); 308 } 309 310 return string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray()); 311 } 312 } 313 314 <legacy-provider :is-enabled="true" :is-page="true"> 315 <div class="frontPage" style="@GetPageStyles()"> 316 <div> 317 @Model.Placeholder("bannerPlaceholder", "Banner Placeholder", "sort:2") 318 </div> 319 <div> 320 @Model.Placeholder("mainContentPlaceholder", "Main Content Placeholder", "default:true;sort:1") 321 </div> 322 </div> 323 </legacy-provider> 324 </layout-master> 325 @Navigation.RenderNavigation("Navigation/Footer.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 326 { 327 StartLevel = 1, 328 StopLevel = 99, 329 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All, 330 RootNavigationTag = "Footer", 331 Parameters = new Dictionary<string, object>() 332 { 333 {"serviceDeskNumber", Model.Area.Item.GetString("PhoneNumber") }, 334 {"serviceDeskText", Model.Area.Item.GetString("Text_1") }, 335 {"companyInformation", Model.Area.Item.GetString("Text_2") } 336 } 337 }) 338 @{ 339 var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser(); 340 var userManagementService = new UserManagementService(); 341 342 if (currentUser != null && !currentUser.IsCustomerUser()) 343 { 344 IEnumerable<User> usersForSelection = userManagementService.GetCustomerUsersForUser(currentUser.ID, Pageview.Area.EcomShopId).Result; 345 if (usersForSelection.Count() > 0) 346 { 347 <select-account-prompt></select-account-prompt> 348 } 349 else if (Model.Item == null || Model.Item.SystemName != "UserPage") 350 { 351 var userManagementPageId = GetPageIdByNavigationTag("Advania_UserManagement"); 352 if (userManagementPageId > 0) 353 { 354 var userManagementItem = Dynamicweb.Content.Services.Items.GetItemByPageId(userManagementPageId, false); 355 if (userManagementItem != null) 356 { 357 int companyAccessAuthParagraphId = -1; 358 object companyAccessAuthObj; 359 if (userManagementItem.TryGetValue("Company_Access_Auth_Paragraph_Id", out companyAccessAuthObj) && companyAccessAuthObj != null) 360 { 361 companyAccessAuthParagraphId = Dynamicweb.Core.Converter.ToInt32(companyAccessAuthObj.ToString()); 362 } 363 364 if (companyAccessAuthParagraphId > 0) 365 { 366 <auth-company-access-required-modal> 367 @RenderParagraphContent(companyAccessAuthParagraphId) 368 </auth-company-access-required-modal> 369 } 370 } 371 } 372 } 373 } 374 } 375 <svg-defs></svg-defs> 376 </dynamicweb-context-provider> 377 </nav-provider> 378 <toasts toast="@toast" toast-type="@toastType"></toasts> 379 @if (globalPopup != 0) 380 { 381 @RenderPageContent(globalPopup) 382 } 383 </div> 384 </body> 385 </html> 386 @* Utility snipper if we need to inject code outside of Master HTML context, like html blocks with injected <script> tags. @see Files/Templates/eCom7/CheckoutHandler/Borgun3D/3DS/ThreeDS.cshtml *@ 387 @RenderSnippet("MasterEnd")