Det er omkring bordet, at vi udveksler idéer, muligheder, følelser og holdninger. Bordet er et helt centralt element, når vi skal arbejde, studere, udfolde os kreativt og tilbringe tid sammen med venner og familie. Et bord kan være hele omdrejningspunktet i et rum eller et mere uformelt sted, hvor mennesker mødes og samarbejder.
Exception in template (eCom/Productlist/ProductList.cshtml): System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary. at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at CompiledRazorTemplates.Dynamic.ceebfaacaaebbce.Execute() at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context) at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag) at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName) at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName) at Dynamicweb.Rendering.Template.Output()
@inherits RazorTemplateBase<RazorTemplateModel<Template>> @using System; @using System.Web; @using System.Linq; @using Dynamicweb.Rendering; @using ff.CustomModules; @using ff.CustomModules.Classes; @using Newtonsoft.Json @{ bool isSearch = !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["search"]); bool isMobile = (GetGlobalValue("Global:Device.IsMobile") == "True") ? true : false; } @if (isSearch) { <div id="productsearchresult" class="grey"> <p> @if (GetInteger("Ecom:ProductList.PageProdCnt") < 2) { @String.Format(Translate("SearchResultSingular", "Your search for \"{0}\" gave {1} result"), HttpContext.Current.Request.QueryString["search"], GetString("Ecom:ProductList.PageProdCnt")) } else { @String.Format(Translate("SearchResultPlural", "Your search for \"{0}\" gave {1} results"), HttpContext.Current.Request.QueryString["search"], GetString("Ecom:ProductList.PageProdCnt")) } </p> </div> } <div id="group-name" style="display:none"></div> @{ var designerGroups = Dynamicweb.eCommerce.Products.Group.GetGroupByID(Pageview.Area.Item["ByDesignerGroupId"].ToString()).SubgroupsDefaultLanguage; Dictionary<string, int> designerSorting = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); for (int i = 0; i < designerGroups.Count; i++) { // key = designer name in lower case stripped of all that is not number or letter, to make sure there isn't any difference string s = FFUtilities.GetOnlyLetters(designerGroups[i].Name); designerSorting.Add(s, i); } var collections = GetLoop("Products") .Where(x => x.GetString("Ecom:Product:Field.Master") == "MASTER") .GroupBy(x => x.GetString("Ecom:Product:Field.Collection")); var dwCollectionGroups = Dynamicweb.eCommerce.Products.Group.GetGroupByID("9999").Subgroups; List<ProductListCollection> productListCollections = new List<ProductListCollection>(); foreach (var collection in collections) { var designers = (from product in collection select product.GetString("Ecom:Product:Field.Designer")) .Union(from product in collection select product.GetString("Ecom:Product:Field.SecondDesigner")) .Where(x => !String.IsNullOrEmpty(x)) .Distinct(); Dynamicweb.eCommerce.Products.Group dwCollectionGroup = null; int collectionSort = 0; for (int i = 0; i < dwCollectionGroups.Count; i++) { if (dwCollectionGroups[i].Name == collection.Key) { dwCollectionGroup = dwCollectionGroups[i]; collectionSort = i; break; } } if (dwCollectionGroup != null) { foreach (var designer in designers) { string designerKey = FFUtilities.GetOnlyLetters(designer); ProductListCollection plc = new ProductListCollection { OrderInCollections = collectionSort, DesignerOrder = designerSorting[designerKey], CollectionName = collection.Key, Designer = designer, DesignerKey = designerKey, Products = collection.OrderBy(x => dwCollectionGroup.Products.IndexOf(x.GetString("Ecom:Product.ID"))).ToList() }; productListCollections.Add(plc); } } } LoopItem designerGroup = null; string currentDesigner = null; foreach (var collection in productListCollections.OrderBy(x => x.DesignerOrder)) { // New designer if (currentDesigner != collection.Designer) { currentDesigner = collection.Designer; <div class="designer-name" id="[email protected]" style="display:none" data-designerkey="@HttpUtility.HtmlAttributeEncode(collection.DesignerKey)" data-designerorder="@collection.DesignerOrder"> @collection.Designer </div> } } //Test <input id="myHidden" type="hidden" value="@collections.Count()" /> //End Test foreach (var collection in productListCollections.OrderBy(x => x.OrderInCollections)) { designerGroup = null; var designers = (from c in productListCollections where c.CollectionName == collection.CollectionName select c.Designer) .Distinct() .ToArray(); string alreadyDisplayedClass = string.Empty; string display = string.Empty; if (productListCollections.Any(x => x.CollectionName == collection.CollectionName && x.DesignerOrder < collection.DesignerOrder)) { alreadyDisplayedClass = "collection-secondary"; display = "display:none"; } <div class="collectioncontainer @alreadyDisplayedClass" id="[email protected](collection.CollectionName)" style="@display" data-designerkey="@HttpUtility.HtmlAttributeEncode(collection.DesignerKey)" data-collectionorder="@collection.OrderInCollections" data-designerorder="@collection.DesignerOrder"> <div class="container container1015"> <h2 class="anchor">@(string.IsNullOrEmpty(collection.CollectionName) ? "No collection name" : collection.CollectionName)</h2> @if (!designers.Contains("Fredericia")) { <div class="collection-by"><h5>@Translate("By", "By") @String.Join(" - ", designers)</h5></div> } <div class="products"> @foreach (var product in collection.Products) { if (designerGroup == null) { designerGroup = product.GetLoop("AssociatedGroups").FirstOrDefault(x => x.GetString("Ecom:Group:Field.GroupType.Value") == "designer"); } List<string> groups = new List<string>(); foreach (var group in product.GetLoop("AssociatedGroups")) { groups.Add(group.GetString("Ecom:Group.ID")); } <div class="inline product-container" data-groups="@String.Join("|", groups.ToArray())" data-filters="@product.GetString("Ecom:Product:Field.Filters")" data-designerkey="@HttpUtility.HtmlAttributeEncode(FFUtilities.GetOnlyLetters(product.GetString("Ecom:Product:Field.Designer")))"> @{ string separator = product.GetString("Ecom:Product.LinkGroup.Clean.PID").Contains('?') ? "&" : "?"; string url = product.GetString("Ecom:Product.LinkGroup.Clean.PID") + separator + "catid=" + product.GetString("Ecom:Product.PrimaryGroupID"); string imageRatio = product.GetString("Ecom:Product:Field.ImageRatio"); string classRatio = "ratio-single"; if (!string.IsNullOrWhiteSpace(imageRatio) && imageRatio != "1") { if (imageRatio == "2") { classRatio = "ratio-double"; } else { var ratio = Math.Round(product.GetDouble("Ecom:Product:Field.ImageRatio")); if (ratio > 1) { classRatio = "ratio-double"; } } } } <div class="product @classRatio visible"> <a href="@url"> <div class="productimgbox @classRatio"> @{ var imageWidth = "550"; var imageHeight = "275"; if (isMobile) { imageWidth = "145"; imageHeight = "145"; } var altText = product.GetString("Ecom:Product.Name"); var image = Pageview.Area.Item["PerfionApiUrl"] + "/Perfion/Image.aspx?id=" + product.GetString("Ecom:Product:Field.ListImage") + "&size=" + imageWidth + "x" + imageHeight + "&format=png&fit=fit"; string imageUrl = "https://test.fredericia.com/cdn-cgi/image/width=" + imageWidth + ",quality=80,f=auto/" + image; <picture> <source srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-srcset="@imageUrl" width="@imageWidth" height="@imageHeight" title="@altText" type="image/webp"> <source srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-srcset="@image" title="@altText" width="@imageWidth" height="@imageHeight" type="image/png"> <img class="img img-responsive b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="@image" alt="@altText" width="@imageWidth" height="@imageHeight"> </picture> } </div> <div class="name">@product.GetString("Ecom:Product.Name")</div> <div class="name-mobile hidden-over768 "><p>@product.GetString("Ecom:Product.Name")</p></div> </a> </div> </div> } </div> @if (designerGroup != null) { <div class="view-collection" style="display:none"> <span class="view-collection-link">@Translate("ViewCollection", "View collection")</span> </div> } </div> </div> } } <script type="text/javascript"> // Don't scroll if there is an anchor (scrolling is done in the js) if (location.hash) { // do the test straight away window.scrollTo(0, 0); // execute it straight away setTimeout(function() { window.scrollTo(0, 0); // run it a bit later also for browser compatibility }, 1); } IsSearch = @(isSearch.ToString().ToLower() + ';') </script> <script src="/Files/Templates/Designs/Fredericia/Assets/js/pages/Products.min.js" defer="defer"></script>