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_1d9ce49aee744d44bfddf4645d130292.GetPageStyles() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 238
   at CompiledRazorTemplates.Dynamic.RazorEngine_1d9ce49aee744d44bfddf4645d130292.Execute() in E:\webcontent\beta.olgerdin.is\Files\Templates\Designs\OlgerdinVefverslun\_parsed\Frontpage_ViteBridge.parsed.cshtml:line 227
   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 }; 39 40 if (Model.CurrentUser != null) 41 { 42 contextAttributes["current-user-id"] = Model.CurrentUser.ID; 43 } 44 45 if (Model.Cart != null) 46 { 47 contextAttributes["current-cart-id"] = Model.Cart.ID; 48 } 49 50 /* This loop enables us to have specific page IDs to use for product search & typeahead functionality. It's used to solve */ 51 /* Danól being split into 3 departments, each with their own subpage which needs to have its search isolated to their */ 52 /* specific products. */ 53 var contextSearchPages = Model.Area.Item.GetItems("Context_Search_Pages"); 54 if (contextSearchPages != null) 55 { 56 foreach (var item in contextSearchPages) 57 { 58 var topPageContextLink = item.GetLink("Top_Page_Context"); 59 if (topPageContextLink != null && topPageContextLink.PageId == Model.TopPage.ID) 60 { 61 var contextSearchPageId = item.GetLink("Search_Page"); 62 if (contextSearchPageId != null && contextSearchPageId.PageId != 0) 63 { 64 contextAttributes["active-search-context-page-id"] = contextSearchPageId.PageId; 65 contextAttributes["product-search-page-id"] = contextSearchPageId.PageId; 66 } 67 68 var contextTypeaheadSearchPageId = item.GetLink("Typeahead_Page"); 69 if (contextTypeaheadSearchPageId != null && contextTypeaheadSearchPageId.PageId != 0) 70 { 71 contextAttributes["product-typeahead-page-id"] = contextTypeaheadSearchPageId.PageId; 72 } 73 break; 74 } 75 } 76 } 77 78 var myProductsPageId = GetPageIdByNavigationTag("MyProducts"); 79 if (myProductsPageId > 0) 80 { 81 var myProductsPage = Dynamicweb.Content.Services.Pages.GetPage(myProductsPageId); 82 if (myProductsPage != null && Dynamicweb.Frontend.SecurityHandler.IsCurrentUserAllowed(myProductsPage)) 83 { 84 contextAttributes["my-products-page-id"] = myProductsPageId; 85 } 86 } 87 88 var contextAttributesFormatted = string.Join(" ", contextAttributes.Select(attr => string.Format("{0}='{1}'", attr.Key, attr.Value))); 89 90 var shopContext = Model.Area.Name.ToLower().Contains("danol") ? ShopContext.Danol : ShopContext.Olgerdin; 91 92 if (!Model.IsCurrentUserAllowed) 93 { 94 System.Web.HttpContext.Current.Response.Redirect("/Default.aspx?ID=" + GetPageIdByNavigationTag("LoginPage")); 95 } 96 97 var googleTagManagerID = Model.Area.Item.GetString("Google_Tag_Manager_ID"); 98 99 100 /* Restores ability to set background image from Website settings which Ölgerðin & Danól use for Holidaythemes */ 101 var layoutStyles = ""; 102 if (Model.Area.Item != null) 103 { 104 105 var styles = new Dictionary<string, string>(); 106 var image = Model.Area.Item.GetString("Background_Image"); 107 if (!string.IsNullOrWhiteSpace(image)) 108 { 109 styles.Add("background-image", string.Format("url('{0}')", image)); 110 } 111 var backgroundSize = Model.Area.Item.GetString("Background_Image_Size"); 112 if (!string.IsNullOrWhiteSpace(backgroundSize)) 113 { 114 styles.Add("background-size", backgroundSize); 115 } 116 117 var backgroundRepeat = Model.Area.Item.GetString("Background_Image_Repeat"); 118 if (!string.IsNullOrWhiteSpace(backgroundRepeat)) 119 { 120 styles.Add("background-repeat", backgroundRepeat); 121 } 122 123 layoutStyles = string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray()); 124 } 125 } 126 127 <!DOCTYPE html> 128 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName"> 129 <head> 130 <meta charset="utf-8" /> 131 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 132 <meta name="PageID" value="@Model.ID" /> 133 @Model.MetaTags 134 135 @if (!string.IsNullOrWhiteSpace(googleTagManagerID)) 136 { 137 <script> 138 (function (w, d, s, l, i) { 139 w[l] = w[l] || []; w[l].push({ 140 'gtm.start': 141 new Date().getTime(), event: 'gtm.js' 142 }); var f = d.getElementsByTagName(s)[0], 143 j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.defer = true; j.src = 144 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); 145 })(window, document, 'script', 'dataLayer', '@(googleTagManagerID)'); 146 </script> 147 } 148 <title>@Model.Title - @(shopContext == ShopContext.Olgerdin ? "Ölgerðin Egill Skallagrímsson" : "Danól") </title> 149 <style> 150 [v-cloak] { 151 display: none; 152 } 153 </style> 154 <link rel="shortcut icon" type="image/x-icon" href="@Model.Area.Item.GetString("Favicon")" /> 155 156 @* Legacy scripts *@ 157 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/Prod_Jquery-3.3.1.js" defer></script> 158 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/owl.carousel.min.js" defer></script> 159 <script src="/Files/Templates/Designs/OlgerdinVefverslun/JS/Libraries/typeahead-0.11.1.js" defer></script> 160 @if (useViteLocalModule) 161 { 162 @vite.RenderModuleAssets() 163 } 164 else 165 { 166 @vite.RenderManifestAssets() 167 } 168 @* Enable injecting scripts/styles for further down in DW Template renderer, see Files\Templates\eCom7\CheckoutHandler\Borgun3D\Post\Post.cshtml *@ 169 @RenderSnippet("MasterHeadEnd") 170 </head> 171 172 <body class="theme theme--@shopContext.ToString().ToLower() scrollbar scrollbar--thick"> 173 @{ 174 var cacheHit = System.Runtime.Caching.MemoryCache.Default.Get("RUID"); 175 if (cacheHit != null) 176 { 177 var ruidInCache = (string)cacheHit; 178 179 if (!string.IsNullOrWhiteSpace(ruidInCache)) 180 { 181 <input type="hidden" id="RUID" value="@ruidInCache" /> 182 System.Runtime.Caching.MemoryCache.Default.Remove("RUID"); 183 } 184 } 185 if (Model.CurrentUser != null) 186 { 187 <input type="hidden" id="UserId" value="@Model.CurrentUser.ID" /> 188 } 189 } 190 @if (!string.IsNullOrWhiteSpace(googleTagManagerID)) 191 { 192 <noscript> 193 <iframe src="https://www.googletagmanager.com/ns.html?id=@(googleTagManagerID)" 194 height="0" width="0" style="display:none;visibility:hidden"></iframe> 195 </noscript> 196 } 197 <div id="app" v-cloak> 198 <dynamicweb-context-provider @contextAttributesFormatted> 199 <theme-scroll-top-button></theme-scroll-top-button> 200 @Navigation.RenderNavigation("Navigation/Navbar.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 201 { 202 StartLevel = 1, 203 StopLevel = 99, 204 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All 205 }) 206 207 @{ 208 var topPage = Dynamicweb.Content.Services.Pages.GetPage(Model.TopPage.ID); 209 var renderMegamenu = topPage.NavigationTag.Contains("Megamenu"); 210 211 if (renderMegamenu) 212 { 213 <div class="legacy"> 214 <div class="megamenu-desktop"> 215 @Navigation.RenderNavigation("Navigation/Megamenu.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 216 { 217 StartLevel = 2, 218 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All, 219 RootPageId = topPage.ID 220 }) 221 </div> 222 </div> 223 } 224 } 225 226 227 <layout-master @(renderMegamenu ? "megamenu" : "") style="@layoutStyles"> 228 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 229 230 231 232 @functions 233 { 234 string GetPageStyles() 235 { 236 var styles = new Dictionary<string, string>(); 237 238 var image = Model.PropertyItem.GetString("Background_Image"); 239 if (!string.IsNullOrWhiteSpace(image)) 240 { 241 styles.Add("background-image", string.Format("url('{0}')", image)); 242 } 243 var backgroundSize = Model.PropertyItem.GetString("Background_Image_Size"); 244 if (!string.IsNullOrWhiteSpace(backgroundSize)) 245 { 246 styles.Add("background-size", backgroundSize); 247 } 248 249 var backgroundRepeat = Model.PropertyItem.GetString("Background_Image_Repeat"); 250 if (!string.IsNullOrWhiteSpace(backgroundRepeat)) 251 { 252 styles.Add("background-repeat", backgroundRepeat); 253 } 254 255 return string.Join(";", styles.Select(prop => string.Format("{0}:{1}", prop.Key, prop.Value)).ToArray()); 256 } 257 } 258 259 <legacy-provider :is-enabled="true" :is-page="true"> 260 <div class="frontPage" style="@GetPageStyles()"> 261 <div> 262 @Model.Placeholder("bannerPlaceholder", "Banner Placeholder", "sort:2") 263 </div> 264 <div> 265 @Model.Placeholder("mainContentPlaceholder", "Main Content Placeholder", "default:true;sort:1") 266 </div> 267 </div> 268 </legacy-provider> 269 </layout-master> 270 @Navigation.RenderNavigation("Navigation/Footer.cshtml", new Dynamicweb.Frontend.Navigation.NavigationSettings() 271 { 272 StartLevel = 1, 273 StopLevel = 99, 274 ExpandMode = Dynamicweb.Frontend.Navigation.ExpandMode.All, 275 RootNavigationTag = "Footer", 276 Parameters = new Dictionary<string, object>() 277 { 278 {"serviceDeskNumber", Model.Area.Item.GetString("PhoneNumber") }, 279 {"serviceDeskText", Model.Area.Item.GetString("Text_1") }, 280 {"companyInformation", Model.Area.Item.GetString("Text_2") } 281 } 282 }) 283 @{ 284 var currentUser = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser(); 285 var userManagementService = new UserManagementService(); 286 287 if (currentUser != null && !currentUser.IsCustomerUser()) 288 { 289 IEnumerable<User> usersForSelection = userManagementService.GetCustomerUsersForUser(currentUser.ID, Pageview.Area.EcomShopId).Result; 290 if (usersForSelection.Count() > 0) 291 { 292 <select-account-prompt></select-account-prompt> 293 } 294 else if (Model.Item == null || Model.Item.SystemName != "UserPage") 295 { 296 var userManagementPageId = GetPageIdByNavigationTag("Advania_UserManagement"); 297 if (userManagementPageId > 0) 298 { 299 var userManagementItem = Dynamicweb.Content.Services.Items.GetItemByPageId(GetPageIdByNavigationTag("Advania_UserManagement"), false); 300 if (userManagementItem != null) 301 { 302 int companyAccessAuthParagraphId = -1; 303 object companyAccessAuthObj; 304 if (userManagementItem.TryGetValue("Company_Access_Auth_Paragraph_Id", out companyAccessAuthObj) && companyAccessAuthObj != null) 305 { 306 companyAccessAuthParagraphId = Dynamicweb.Core.Converter.ToInt32(companyAccessAuthObj.ToString()); 307 } 308 309 if (companyAccessAuthParagraphId > 0) 310 { 311 <auth-company-access-required-modal> 312 @RenderParagraphContent(companyAccessAuthParagraphId) 313 </auth-company-access-required-modal> 314 } 315 } 316 } 317 } 318 } 319 } 320 <svg-defs></svg-defs> 321 </dynamicweb-context-provider> 322 </div> 323 </body> 324 </html> 325 @* 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 *@ 326 @RenderSnippet("MasterEnd")