Bense

Error executing template "Designs/eldorado-b2b/eCom/Productlist/eldorado-brands-products-with-filters.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_2ec728c5a8894168ad5ad76e4d9217f7.Execute() in D:\dynamicweb.net\Solutions\eldorado.new.LIVE\Application\Files\Templates\Designs\eldorado-b2b\eCom\Productlist\eldorado-brands-products-with-filters.cshtml:line 366
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 @using System.Collections.Specialized 2 @using System.Text 3 @using Co3.Espresso.Base.Extensions 4 @using Co3.Espresso.Website.Models.FrontEnd 5 @using Co3.Espresso.Website.Models.FrontEnd.Ecommerce 6 @using Co3.Espresso.Website.Models.FrontEnd.Handlebars 7 @using Co3.Espresso.Website.Models.FrontEnd.Settings 8 @using Co3.Espresso.Website.Services 9 @using Dynamicweb.Ecommerce 10 @using Dynamicweb.Ecommerce.Products 11 @using ProductService = Co3.Espresso.Website.Services.ProductService 12 @using System.Web 13 @using Dynamicweb.Frontend 14 @using Dynamicweb.Indexing.Querying 15 @using Dynamicweb.Modules 16 @using Newtonsoft.Json 17 @using SortInfo = Dynamicweb.Indexing.Querying.Sorting.SortInfo 18 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 19 @{ 20 bool showFilters = Espresso.Item.FiltersShow == "True"; 21 bool showNavigation = Espresso.Item.NavigationShow == "True"; 22 bool showHeading = Espresso.Item.HeadingShow == "True"; 23 EspressoSort sort = ProductListService.Instance.GetSort(); 24 25 26 Properties moduleProperties = PageView.Current()?.CurrentParagraph?.ModuleProperties; 27 string moduleSortBy = sort.By; // GetString( "Ecom:ProductList.SortBy" ); 28 string moduleSortOrder = sort.Order; // GetString( "Ecom:ProductList.SortOrder" ); 29 30 if ( moduleProperties != null && moduleProperties.Values.ContainsKey( "QuerySortByParams" ) ) 31 { 32 IEnumerable< SortInfo > sortInfos = new List< SortInfo >(); 33 StringBuilder _moduleSortBy = new StringBuilder(); 34 StringBuilder _moduleSortOrder = new StringBuilder(); 35 36 if ( moduleProperties.Values[ "QuerySortByParams" ]?.ToString() != "null" ) 37 { 38 string querySortByParams = moduleProperties.Values[ "QuerySortByParams" ].ToString().Replace( "&quot;", "\"" ); 39 sortInfos = JsonConvert.DeserializeObject< IEnumerable< SortInfo > >( querySortByParams ); 40 } 41 else 42 { 43 IQuery iQuery = new QueryService().LoadQuery( "EspressoProducts", "Products" ); 44 sortInfos = iQuery.SortOrder; 45 } 46 47 foreach ( SortInfo sortOrder in sortInfos ) 48 { 49 _moduleSortBy.AppendLine( sortOrder.Field ); 50 _moduleSortOrder.AppendLine( sortOrder.SortDirection.ToString() == "Descending" ? "DESC" : "ASC" ); 51 } 52 moduleSortBy = _moduleSortBy.Replace( Environment.NewLine, "," ).ToString(); 53 moduleSortOrder = _moduleSortOrder.Replace( Environment.NewLine, "," ).ToString(); 54 moduleSortBy = moduleSortBy.Substring( 0, moduleSortBy.Length - 1 ); 55 moduleSortOrder = moduleSortOrder.Substring( 0, moduleSortOrder.Length - 1 ); 56 } 57 58 ClassList asideClasses = new ClassList(); 59 ClassList mainClasses = new ClassList(); 60 61 if ( showNavigation ) 62 { 63 asideClasses.AddClasses( "col-12 col-lg-3 col-xl-2" ); 64 mainClasses.AddClasses( "col-12 col-lg-9 col-xl-10" ); 65 } 66 else 67 { 68 asideClasses.AddClasses( "d-none" ); 69 mainClasses.AddClasses( "col-12" ); 70 } 71 72 73 HandlebarsProductListTemplate handlebarsProductListTemplate = HandlebarsService.Instance.GetProductListTemplate( new HandlebarsProductListTemplateSettings 74 { 75 Classes = new ClassList( "w-100 e-productlist js-e-productlist js-e-require" ), 76 HeaderClasses = new ClassList( "col-12" ), 77 MainClasses = mainClasses, 78 AsideClasses = asideClasses, 79 FooterClasses = new ClassList( "col-12 col-lg-3 col-xl-2" ), 80 PageSize = string.IsNullOrEmpty( HttpContext.Current.Request[ "PageSize" ] ) ? GetInteger( "Ecom:ProductList.PageSize" ).ToString() : HttpContext.Current.Request[ "PageSize" ], 81 PageNumber = string.IsNullOrEmpty( HttpContext.Current.Request[ "PageNum" ] ) ? GetInteger( "Ecom:ProductList.CurrentPage" ).ToString() : HttpContext.Current.Request[ "PageNum" ], 82 SortBy = string.IsNullOrEmpty( HttpContext.Current.Request[ "SortBy" ] ) ? moduleSortBy : HttpContext.Current.Request[ "SortBy" ], 83 SortOrder = string.IsNullOrEmpty( HttpContext.Current.Request[ "SortOrder" ] ) ? moduleSortOrder : HttpContext.Current.Request[ "SortOrder" ], 84 //SortBy = string.IsNullOrEmpty( HttpContext.Current.Request[ "SortBy" ] ) ? sort.By : HttpContext.Current.Request[ "SortBy" ], 85 //SortOrder = string.IsNullOrEmpty( HttpContext.Current.Request[ "SortOrder" ] ) ? sort.Order : HttpContext.Current.Request[ "SortOrder" ], 86 ShowFilters = showFilters, 87 ShowSorting = Espresso.Item.SortShow == "True", 88 Heading = Espresso.Item.HeadingShow == "True" ? Espresso.Item.Name : string.Empty 89 } ); 90 91 92 List< EspressoPagingPage > productListPaging = new List< EspressoPagingPage >(); 93 if ( GetLoop( "Ecom:ProductList.Pages" ).Count > 0 ) 94 { 95 foreach ( LoopItem page in GetLoop( "Ecom:ProductList.Pages" ) ) 96 { 97 productListPaging.Add( new EspressoPagingPage 98 { 99 Url = page.GetString( "Ecom:ProductList.Pages.Page.Url" ), 100 Number = page.GetString( "Ecom:ProductList.Pages.Page.Number" ) 101 } ); 102 } 103 } 104105 List< EspressoProduct > productListProducts = GetLoop( "Products" ).Select( 106 productLoopItem => ProductService.Instance.GetEspressoProduct( 107 new ProductSettings 108 { 109 Id = productLoopItem.GetString( "Ecom:Product.ID" ), 110 VariantId = productLoopItem.GetString( "Ecom:Product.VariantID" ), 111 PrimaryVariantId = productLoopItem.GetString( "Ecom:Product.DefaultVariantComboID" ), 112 EmbeddedInModelList = false 113 } 114 ) 115 ).ToList(); 116117 EspressoProductList espressoProductList = ProductListService.Instance.GetProductList( 118 new ProductListSettings 119 { 120 Products = productListProducts, 121 Paging = productListPaging, 122 PageSize = Convert.ToInt32( handlebarsProductListTemplate.PageSize ), 123 CurrentPage = Convert.ToInt32( handlebarsProductListTemplate.PageNumber ) 124 } 125 ); 126127 List< LoopItem > brandFacetOptions = GetLoop( "FacetGroups" ).FirstOrDefault( fg => fg.GetString( "FacetGroup.Name" ) == "Brands" ).GetLoop( "Facets" ).FirstOrDefault( f => f.GetString( "Facet.Name" ) == "FBrand" ).GetLoop( "FacetOptions" ).ToList(); 128129 HttpContext.Current.Items[ "CurrentGroupID" ] = Values.ContainsKey( "Ecom:Group.ID" ) ? Values[ "Ecom:Group.ID" ] : string.Empty; 130 string fBrandValue = HttpContext.Current.Request.QueryString[ "FBrand" ]; 131 } 132133 @*@using Co3.Espresso.Base.Extensions 134 @using Co3.Espresso.Base.Models 135 @using Co3.Espresso.Website.Models.FrontEnd 136 @using Co3.Espresso.Website.Models.FrontEnd.Elements 137 @using Co3.Espresso.Website.Models.FrontEnd.Settings 138 @using Co3.Espresso.Website.Services 139 @using Dynamicweb.Content 140 @using Dynamicweb.Content.Data 141 @using Dynamicweb.Core 142 @using Dynamicweb.Ecommerce 143 @using Dynamicweb.Ecommerce.Products 144 @using Dynamicweb.Ecommerce.Shops 145 @using Dynamicweb.Extensibility 146 @using Dynamicweb.Frontend 147 @using Dynamicweb.Security.Permissions 148149150 @{ 151 PageView currentPageView = PageView.Current(); 152 string areaUrlName = !string.IsNullOrEmpty( currentPageView.Area.UrlName ) ? "/" + currentPageView.Area.UrlName: ""; 153154 Group group = Services.ProductGroups.GetGroup(GetString("Ecom:Group.ID")); 155 string groupName = string.Empty; 156 string groupImage = string.Empty; 157 Shop shop = new ShopService().GetShop( PageView.Current().Area.EcomShopId ); 158 IEnumerable<Group> productGroupsPath = new List< Group >(); 159 List<dynamic> breadCrumbCollection = new List< dynamic >(); 160 string pageId = PageView.Current().Page.ID.ToString(); 161162 if (group != null) 163 { 164 groupName = group.Name; 165 groupImage = !string.IsNullOrEmpty( group.LargeImage ) ? group.LargeImage : group.ParentGroups.Count > 0 ? group.ParentGroups.FirstOrDefault()?.LargeImage : string.Empty; 166 productGroupsPath = Services.ProductGroups.FindPath(shop, group ); 167 } 168169170 foreach (ElementWithIndex< Group > _group in productGroupsPath.WithIndex() ) 171 { 172 string _link = string.Format("/Default.aspx?ID={0}&GroupID={1}", pageId, _group.Element.Id); 173 breadCrumbCollection.Add( new 174 { 175 index = _group.Index, 176 link = _link, 177 label = _group.Element.Name 178 }); 179 } 180181 ClassList sectionClasses = new ClassList(); 182183184 string hideHeaderClass = ""; 185 if ( Espresso.Item.HeadingShow == "False" ) 186 { 187 hideHeaderClass = "d-none"; 188 } 189 else 190 { 191 if(!string.IsNullOrEmpty(groupName) ) { 192 sectionClasses.AddClasses("e-section d-flex align-items-center eldorado-productlist-header"); 193194 if (!string.IsNullOrEmpty(groupImage) ) 195 { 196 groupImage = ImageService.Instance.GetImageURL( $"/Files{groupImage}", 1700, 300, 5, 90 ); 197 sectionClasses.AddClasses("e-text-light e-section-height-xs"); 198 } 199 else 200 { 201 sectionClasses.AddClasses("mt-5"); 202 } 203 } 204 else 205 { 206 sectionClasses.AddClasses("e-section d-flex align-items-center eldorado-productlist-header"); 207 } 208 } 209 <script>console.log(@JsonService.Instance.ToJson(Espresso.Item.HeadingShow));</script> 210 } 211212 @RenderingService.Instance.SectionEnd() 213214 @if ( ( bool )Espresso.Page.Item[ "HeaderHide" ] == false ) 215 { 216 <section class="@sectionClasses @hideHeaderClass" style="background-image: url('@(groupImage)')"> 217 <div class="container-fluid"> 218 <div class="row"> 219 <div class="col-12 col-md-12 col-lg-12 mx-auto"> 220 <div class="row"> 221222 <div class="p p-imagetext p-imagetext-tb col-12" > 223 <div class="row"> 224 <div class="p-txt-container col-12"> 225 <h2 class="mb-0"> 226 @groupName 227 </h2> 228 </div> 229 </div> 230 </div> 231232 </div> 233 </div> 234 </div> 235 </div> 236 </section> 237 } 238 else 239 { 240 <a class="position-relative nav-link js-e-require" data-require="cart" href="@areaUrlName/shop/cart"></a> 241 } 242243244 <section class="p p-section e-section js-e-section pt-1 "> 245 <div class="container-fluid"> 246 <div class="row"> 247 <div class="col-12 mx-auto"> 248 <div class="row"> 249 <div class="p p-imagetext p-imagetext-tb col-12"> 250251 <nav class="e-breadcrumb-container @hideHeaderClass"> 252 <ol class="breadcrumb nav p-0" itemscope itemtype="https://schema.org/BreadcrumbList"> 253 <li class="breadcrumb-item"> 254 <a href="/"> 255 @ServiceLocator.Current.GetPageService().GetFirstPageForArea( PageView.Current().Area.ID ).MenuText 256 </a> 257 </li> 258 @foreach (dynamic breadCrumbItem in breadCrumbCollection.OrderBy(bcc => bcc.index) ) 259 { 260 <li class="breadcrumb-item"> 261 <a href="@breadCrumbItem.link"> 262 @breadCrumbItem.label 263 </a> 264 </li> 265 } 266 </ol> 267 </nav> 268 *@ 269270271 <div class="@handlebarsProductListTemplate.Classes" data-current-page="@GetInteger( "Ecom:ProductList.CurrentPage" )" data-page-count="@GetLoop( "Ecom:ProductList.Pages" ).Count" data-page-size="@handlebarsProductListTemplate.PageSize" data-products-url="@Espresso.Item.ProductsUrl" data-filters-url="@Espresso.Item.ProductsUrl" data-require="productlist"> 272 <div class="row"> 273 <div class="col-12"> 274 @RenderingService.Instance.PartialView( "ecom/productlist/partials/header.cshtml", handlebarsProductListTemplate ) 275 </div> 276277 <div class="@handlebarsProductListTemplate.AsideClasses"> 278279 <div class="d-lg-block d-none"> 280 <div class="e-productlist-filters-group js-e-productlist-filters-group"> 281 <fieldset class="collapse e-productlist-filters-group-options show p-0" id="e-productlist-filters-group-navigation"> 282 <div class="e-nav-local e-nav-local-vertical mb-2"> 283 <nav class="e-nav-local-container"> 284 <ul class="flex-column nav"> 285 @{ 286 foreach ( LoopItem facetOption in brandFacetOptions.Where(bfo => bfo.GetInteger("FacetOption.Count") > 0) ) 287 { 288 string pagePath = string.Format( "/Default.aspx?ID={0}&FBrand={1}", PageView.Current().Page.ID, facetOption.GetString("FacetOption.Value") ); 289 string activeCssClass = fBrandValue == facetOption.GetString( "FacetOption.Value" ) ? "font-weight-bold" : string.Empty; 290 <li class="nav-item @activeCssClass"> 291 <a class="nav-link" href="@pagePath"> 292 <span class="e-nav-pagename">@facetOption.GetString("FacetOption.Label")</span> 293 </a> 294 </li> 295 } 296 } 297 </ul> 298 </nav> 299 </div> 300 </fieldset> 301 </div> 302 </div> 303304 @{ 305 if ( Values.ContainsKey( "Ecom:Group.ID" ) ) 306 { 307 Group productGroup = Services.ProductGroups.GetGroup( Values[ "Ecom:Group.ID" ]?.ToString() ); 308 if ( productGroup != null ) 309 { 310 string productListSidebarContentPage = productGroup.GetProductGroupFieldValue< string >( "ProductListSidebarContentPage" ); 311 if ( !string.IsNullOrEmpty( productListSidebarContentPage ) ) 312 { 313 int.TryParse( productListSidebarContentPage.Split( new[] { "=" }, StringSplitOptions.RemoveEmptyEntries ).Last(), out int productListSidebarContentPageID ); 314 if ( productListSidebarContentPageID > 0 ) 315 { 316 <div class="mt-3"> 317 @RenderPageContent( productListSidebarContentPageID ) 318 </div> 319 } 320 } 321 } 322 } 323 } 324 </div> 325326 <div class="@handlebarsProductListTemplate.MainClasses"> 327 <form class="js-e-productlist-form"> 328 <input name="PageNum" type="hidden" value="@HttpUtility.HtmlAttributeEncode( handlebarsProductListTemplate.PageNumber )"> 329 <input name="SortBy" type="hidden" value="@HttpUtility.HtmlAttributeEncode( handlebarsProductListTemplate.SortBy )"> 330 <input name="SortOrder" type="hidden" value="@HttpUtility.HtmlAttributeEncode( handlebarsProductListTemplate.SortOrder )"> 331 <input name="PageSize" type="hidden" value="@HttpUtility.HtmlAttributeEncode( handlebarsProductListTemplate.PageSize )"> 332333334 @{ 335 NameValueCollection urlParams = Dynamicweb.Context.Current.Request.QueryString; 336 List< string > paramsToIgnore = new List< string >() { "PageNum", "SortBy", "SortOrder" }; 337338 if ( handlebarsProductListTemplate.ShowFilters ) 339 { 340 foreach ( LoopItem facetGroup in GetLoop( "FacetGroups" ) ) 341 { 342 <input name="fg" type="hidden" value="@facetGroup.GetString( "FacetGroup.Name" )"> 343 } 344 } 345346 foreach ( LoopItem queryParameter in GetLoop( "Query.Parameters" ) ) 347 { 348 if ( string.IsNullOrEmpty( queryParameter.GetString( "Parameter.Value" ) ) == false ) 349 { 350 if ( queryParameter.GetBoolean( "Parameter.IsHandledAsFacet" ) == false && queryParameter.GetString( "Parameter.Name" ) != "q" ) 351 { 352 string dataAttrExcludeInUrlValue = "true"; 353 if ( urlParams[ queryParameter.GetString( "Parameter.Name" ) ] != null ) 354 { 355 dataAttrExcludeInUrlValue = string.Empty; 356 paramsToIgnore.Add( queryParameter.GetString( "Parameter.Name" ) ); 357 } 358359 <input name="@queryParameter.GetString( "Parameter.Name" )" type="hidden" value="@HttpUtility.HtmlAttributeEncode( queryParameter.GetString( "Parameter.Value" ) )" data-excludeinurl="@dataAttrExcludeInUrlValue"> 360 } 361 } 362 } 363364 foreach ( object urlParam in urlParams) 365 { 366 if ( !paramsToIgnore.Contains(urlParam.ToString()) && !paramsToIgnore.Contains(urlParam.ToString())) 367 { 368 <input name="@urlParam.ToString()" type="hidden" value="@HttpUtility.HtmlAttributeEncode( urlParams[urlParam.ToString()] )"> 369 } 370 } 371 } 372373374 @{ 375 Uri urlReferrer = HttpContext.Current.Request.UrlReferrer; 376 string urlBack = "/"; 377 if ( urlReferrer != null ) 378 { 379 urlBack = urlReferrer.LocalPath; 380 } 381 } 382383 @if ( ( bool )Espresso.Page.Item[ "HeaderHide" ] ) 384 { 385 <a class="btn btn-sm btn-secondary mb-3 align-self-center js-e-back-link order-first arrow-left" href="@urlBack"> 386 <i class="material-icons material-icons-large d-none">arrow_back</i>Tilbage 387 </a> 388 } 389390 @RenderingService.Instance.PartialView( "ecom/productlist/partials/filters-search.cshtml", Espresso ) 391392393 @RenderingService.Instance.PartialView( "ecom/productlist/partials/horizontal-filters.cshtml", Espresso ) 394 </form> 395 @RenderingService.Instance.PartialView( "ecom/productlist/partials/products.cshtml", espressoProductList ) 396 @RenderingService.Instance.PartialView( "ecom/productlist/partials/paging.cshtml", espressoProductList ) 397 @RenderingService.Instance.PartialView( "ecom/productlist/partials/footer.cshtml", handlebarsProductListTemplate ) 398 </div> 399 </div> 400 </div> 401
keyboard_arrow_up