Dag-til-dag
levering
14 DAGES PRISGARANTI
FRI FRAGT FRA KR 795,- EKSKL. MOMS
Kundeservice
7533 2060
Exception in template (eCom/Productlist/ProductList.cshtml): System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.edbcfbaefebd.Execute() at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context) at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName) at Dynamicweb.Rendering.Template.Output()
@using System.Linq @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @{ string GroupId = GetString("Ecom:Group.ID"); var SubGroups = GetLoop("Subgroups"); string ProductCataloguePage = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetString("ProductCataloguePage"); bool DiscountSplash = Firstweb.Custom.CustomCode.Frontend.Helpers.AreaItems.GetInt("AktiverRabatSplash") == 1 ? true : false; var CurrentGroup = Dynamicweb.eCommerce.Products.Group.GetGroupByID(GroupId); string ProductListWidth = "span9"; } <h1>@GetString("Ecom:Group.Name")</h1> <div class="js-description js-group-list"> @GetString("Ecom:Group.Description") </div> <div class="read-more"> <i class="icon-angle-down"></i> <span class="read-more-collapsed">Læs mere</span> <span class="read-more-expanded">Læs mindre</span> </div> @if (IsTopLevelGroup(GroupId)) { <div class="category-list"> @foreach (var SubGroup in SubGroups) { string Name = SubGroup.GetString("Ecom:Group.Name"); string Link = SubGroup.GetString("Ecom:Group.Link.Clean"); string Image = SubGroup.GetString("Ecom:Group.SmallImage"); <a href="@Link" class="category-item"> <img src="@Image" alt="@Name" /> <h3 class="name">@Name</h3> </a> } </div> } else if (IsTopLevelGroup(GetParentGroup(GroupId).ID) ) { var ModelGroups = SubGroups.Where(g => g.GetString("Ecom:Group.Number") == "MODEL"); var SizeGroups = SubGroups.Where(g => g.GetString("Ecom:Group.Number") == "SIZE"); foreach (var ModelGroup in ModelGroups) { var Models = ModelGroup.GetLoop("Childgroups").ToList(); if (Models.Any()) { <div class="model-list"> @foreach (var Model in Models) { string Name = Model.GetString("Ecom:Group.Name"); string Link = Model.GetString("Ecom:Group.Link.Clean"); string Image = Model.GetString("Ecom:Group.SmallImage"); bool ShowInMenu = Model.GetBoolean("Ecom:Group.ShowInMenu"); if (ShowInMenu != false) { <a href="@Link#js-product-list-scroll" class="model-item js-product-list-btn"> <img src="@Image" alt="@Name" /> <p class="name">@Name</p> </a> } } </div> } } <div class="row"> @if (SizeGroups.Any()) { <div class="span3"> <div class="formats"> <div class="format-selector"> <span>@Translate("SelectFormat", "Vælg format")</span> </div> <div class="format-list"> @foreach (var SizeGroup in SizeGroups) { var Sizes = SizeGroup.GetLoop("Childgroups").ToList(); <div class="format-list"> @foreach (var Size in Sizes) { string Name = Size.GetString("Ecom:Group.Name"); string Link = Size.GetString("Ecom:Group.Link.Clean"); <a href="@Link" class="format-item"> <span>@Name</span> </a> } </div> } </div> </div> </div> } else { ProductListWidth = "span12"; } <div class="@ProductListWidth"> <div id="js-product-list-scroll" class="scrollToTop"> <a href="#anchor-page-top" class="btn btn-mini js-back-button"> <i class="icon-arrow-up"></i> @Translate("Webshop_TilbageTilToppen", "Tilbage til toppen") </a> </div> <div class="product-list"> @foreach (var Product in GetLoop("Products")) { @RenderProduct(Product, ProductCataloguePage, DiscountSplash) } </div> </div> </div> } else if (GetParentGroup(GroupId).Number == "SIZE" || GetParentGroup(GroupId).Number == "MODEL") { var GrandParentGroup = GetParentGroup(GetParentGroup(GroupId).ID); var ModelGroups = GrandParentGroup.Subgroups.Where(g => g.Number == "MODEL").FirstOrDefault(); var SizeGroups = GrandParentGroup.Subgroups.Where(g => g.Number == "SIZE").FirstOrDefault(); if (GetParentGroup(GroupId).Number == "MODEL") { SizeGroups = CurrentGroup; } if (ModelGroups.Subgroups.Any()) { <div class="model-list"> @foreach (var Model in ModelGroups.Subgroups) { string Name = Model.Name; string Link = ProductCataloguePage + "&groupid=" + Model.ID; string Image = "/Files" + Model.SmallImage; string SelectedClass = Model.ID == GroupId ? "selected" : ""; bool ShowInMenu = Model.NavigationShowInMenu; if (ShowInMenu != false) { <a href="@Link#js-product-list-scroll" class="model-item @SelectedClass js-product-list-btn"> <img src="@Image" alt="@Name" /> <p class="name">@Name</p> </a> } } </div> } <div class="row"> @if (SizeGroups.Subgroups.Any()) { <div class="span3"> <div class="formats"> <div class="format-selector"> <span>@Translate("SelectFormat", "Vælg format")</span> </div> <div class="format-list"> @foreach (var Size in SizeGroups.Subgroups) { string Name = Size.Name; string Link = ProductCataloguePage + "&groupid=" + Size.ID; string SelectedClass = Size.ID == GroupId ? "selected" : ""; <a href="@Link" class="format-item @SelectedClass"> <span>@Name</span> </a> } </div> </div> </div> } else { ProductListWidth = "span12"; } <div class="@ProductListWidth"> <div id="js-product-list-scroll" class="scrollToTop"> <a href="#anchor-page-top" class="btn btn-mini js-back-button"> <i class="icon-arrow-up"></i> @Translate("Webshop_TilbageTilToppen", "Tilbage til toppen") </a> </div> <div class="product-list"> @foreach (var Product in GetLoop("Products")) { @RenderProduct(Product, ProductCataloguePage, DiscountSplash) } </div> </div> </div> } else { var GrandParentGroup = GetParentGroup(GetParentGroup(GroupId).ID); var SizeGroups = GetParentGroup(GroupId); var ModelGroups = GrandParentGroup.Subgroups; var AncestorGroups = GetAllAncestorGroups(GroupId); if (ModelGroups.Any()) { <div class="model-list"> @foreach (var Model in ModelGroups) { string Name = Model.Name; string Link = ProductCataloguePage + "&groupid=" + Model.ID; string Image = "/Files" + Model.SmallImage; string SelectedClass = AncestorGroups.Where(ag => ag.ID == Model.ID).Any() ? "selected" : ""; <a href="@Link#js-product-list-scroll" class="model-item @SelectedClass js-product-list-btn"> <img src="@Image" alt="@Name" /> <p class="name">@Name</p> </a> } </div> } <div class="row"> @if (SizeGroups.Subgroups.Any()) { <div class="span3"> <div class="formats"> <div class="format-selector"> <span>@Translate("SelectFormat", "Vælg format")</span> </div> <div class="format-list"> @foreach (var Size in SizeGroups.Subgroups) { string Name = Size.Name; string Link = ProductCataloguePage + "&groupid=" + Size.ID; string SelectedClass = Size.ID == GroupId ? "selected" : ""; <a href="@Link" class="format-item @SelectedClass "> <span>@Name</span> </a> } </div> </div> </div> } else { ProductListWidth = "span12"; } <div class="@ProductListWidth"> <div id="js-product-list-scroll" class="scrollToTop"> <a href="#anchor-page-top" class="btn btn-mini js-back-button"> <i class="icon-arrow-up"></i> @Translate("Webshop_TilbageTilToppen", "Tilbage til toppen") </a> </div> <div class="product-list"> @foreach (var Product in GetLoop("Products")) { @RenderProduct(Product, ProductCataloguePage, DiscountSplash) } </div> </div> </div> } <div> @GetString("Ecom:Group:Field.GroupDescriptionBottom.Value.Clean") </div> @helper RenderProduct(LoopItem Product, string ProductCataloguePage, bool DiscountSplash) { string Name = Product.GetString("Ecom:Product.ShortDescription.Raw"); string Image = Product.GetString("Ecom:Product.ImageLarge.Clean"); string ProductId = Product.GetString("Ecom:Product.ID"); string GroupId = Product.GetString("Ecom:Product.PrimaryOrFirstGroupID"); string Link = ProductCataloguePage + "&groupid=" + GroupId + "&productid=" + ProductId; string PriceWithoutVAT = Product.GetString("LowestPriceWithoutVAT.Formated"); string PriceWithVAT = Product.GetString("LowestPriceWithVAT.Formated"); int VariantCount = Product.GetInteger("Ecom:Product.VariantCount"); string SaveAtLeast = Product.GetString("Display.Product.SaveAtLeastPrice.PriceWithoutVATFormatted"); string CustomerType = GetGlobalValue("Co3.Display.GlobalTags.CustomerType"); <a href="@Link" class="product-item"> @if (!string.IsNullOrWhiteSpace(SaveAtLeast)) { <div class="product-list-ribbon"> @Translate("SaveRibbonText", "Spar mindst")<br>@SaveAtLeast </div> } <div class="image-container"> <img src="@Image" alt="@Product.GetString("Ecom:Product.Name")" /> @if (DiscountSplash) { <div class="product-list-splash"> <p>-10%</p> </div> } </div> <div class="description">@Name</div> <div class="price"> @if (VariantCount > 0) { <p>@Translate("eCom_Productlist_ViewMoreLinkText", "Se mere")</p> } else { <p> @Translate("PriceFrom", "Pris fra") @if ( CustomerType == "is-private" ) { @PriceWithVAT } else { @PriceWithoutVAT } </p> } </div> </a> } @functions { private bool IsTopLevelGroup(string Id) { return Dynamicweb.eCommerce.Products.Group.GetGroupByID(Id).IsTopGroup; } private Dynamicweb.eCommerce.Products.Group GetParentGroup(string Id) { var _return = new Dynamicweb.eCommerce.Products.Group(); var ParentGroups = Dynamicweb.eCommerce.Products.Group.GetGroupByID(Id).ParentGroups; if (ParentGroups.Count > 0) { _return = ParentGroups.FirstOrDefault(); } return _return; } private List<Dynamicweb.eCommerce.Products.Group> GetAllAncestorGroups(string Id) { var _return = new List<Dynamicweb.eCommerce.Products.Group>(); string IdToAskAbout = Id; bool TopLevelGroupFound = false; do { var ParentGroup = GetParentGroup(IdToAskAbout); _return.Add(ParentGroup); if (IsTopLevelGroup(ParentGroup.ID)) { TopLevelGroupFound = true; } IdToAskAbout = ParentGroup.ID; } while (!TopLevelGroupFound); return _return; } }