Error executing template "Designs/Swift/Paragraph/Swift_ProductListFacets.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_c6db31e380674422a74725ff81e9ab25.Execute() in D:\dynamicweb.net\Solutions\FlexMedia\siso2021.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductListFacets.cshtml:line 190
   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.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using Dynamicweb.Frontend.Navigation 4 @using Dynamicweb.Environment 5 @using Dynamicweb.Core.Encoders 6 @using System.Text.RegularExpressions 7 @using System.Web 8 @using Dynamicweb.Core 9 @using System.Linq 10 11 @{ 12 ProductListViewModel productList = new ProductListViewModel(); 13 if (Dynamicweb.Context.Current.Items.Contains("ProductList")) 14 { 15 productList = (ProductListViewModel)Dynamicweb.Context.Current.Items["ProductList"]; 16 } 17 18 string url = Pageview.SearchFriendlyUrl; 19 url = url.LastIndexOf("?") != -1 ? url.Substring(0, url.LastIndexOf("?")) : url; 20 21 string groupId = string.Empty; 22 23 //Fix for non-friendly urls 24 if (Dynamicweb.Context.Current.Request.QueryString.Get("GroupID") != null) 25 { 26 groupId = Dynamicweb.Context.Current.Request.QueryString.Get("GroupID"); 27 url += "?GroupID=" + groupId; 28 } 29 30 if (!url.Contains("LayoutTemplate")) 31 { 32 url += url.Contains("?") ? "&LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml" : "?LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml"; 33 } 34 35 bool facetsFound = false; 36 int selectedFacetsCount = 0; 37 38 if (productList.FacetGroups != null) 39 { 40 foreach (FacetGroupViewModel facetGroup in productList.FacetGroups) 41 { 42 foreach (FacetViewModel facet in facetGroup.Facets) 43 { 44 if (facet.Options.Count() > 0) 45 { 46 facetsFound = true; 47 48 foreach (FacetOptionViewModel option in facet.Options) 49 { 50 if (option.Selected) 51 { 52 selectedFacetsCount++; 53 } 54 } 55 } 56 } 57 } 58 } 59 60 bool enableSorting = Model.Item.GetBoolean("SortByNameAZ"); 61 enableSorting = Model.Item.GetBoolean("SortByNameZA") || enableSorting == true ? true : false; 62 enableSorting = Model.Item.GetBoolean("SortByNewest") || enableSorting == true ? true : false; 63 enableSorting = Model.Item.GetBoolean("SortByLowestPrice") || enableSorting == true ? true : false; 64 enableSorting = Model.Item.GetBoolean("SortByHighestPrice") || enableSorting == true ? true : false; 65 66 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 67 contentPadding = contentPadding == "none" ? " px-0 py-2" : contentPadding; 68 contentPadding = contentPadding == "small" ? " p-3" : contentPadding; 69 70 string layout = Model.Item.GetRawValueString("Layout", "vertical"); 71 72 var formFieldsParms = new Dictionary<string, object>(); 73 formFieldsParms.Add("DeviceType", "desktop"); 74 } 75 76 @if (productList.TotalProductsCount > 0 && (facetsFound || Model.Item.GetBoolean("EnableGroupNavigation") || enableSorting)) 77 { 78 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 79 string modalTheme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("ModalTheme")) ? " theme " + Model.Item.GetRawValueString("ModalTheme").Replace(" ", "").Trim().ToLower() : string.Empty; 80 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 81 string selectedFacetsLabel = selectedFacetsCount > 0 ? "(" + selectedFacetsCount + ")" : string.Empty; 82 string formContainerCss = layout == "horizontal" ? $"d-lg-flex gap-3 flex-row flex-wrap {theme}" : $"d-lg-block h-100 {theme}"; 83 84 //Desktop 85 if (layout == "horizontal") 86 { 87 contentPadding = contentPadding == "small" ? " p-3" : contentPadding; 88 @:<div class="@theme @contentPadding h-100"> 89 } 90 91 <form method="post" action="@url" data-response-target-element="content" id="FacetsForm_Desktop_@Model.ID" class="d-none @formContainerCss item_@Model.Item.SystemName.ToLower()"> 92 @RenderPartial("Paragraph/ProductListFacets/FormFields.cshtml", Model, formFieldsParms) 93 94 @if (layout == "horizontal" && selectedFacetsCount > 0) 95 { 96 <button type="button" class="btn btn-sm me-sm-1 me-lg-2" onclick="swift.ProductList.ResetFacets(event)"><span class="icon-2">@ReadFile(iconPath + "rotate-ccw.svg")</span> @Translate("Clear filters")</button> 97 } 98 </form> 99 100 if (layout == "vertical") { 101 <script> 102 103 function lastOpened (e){ 104 105 106 if (e.classList.contains('collapsed')){ 107 setCookie("LastOpenedFacet", 0, 0); 108 } else { 109 setCookie("LastOpenedFacet", e.innerText, 10); 110 } 111 112 113 } 114 115 function setCookie(name, value, maxAgeSeconds) { 116 var maxAgeSegment = "; max-age=" + maxAgeSeconds; 117 document.cookie = encodeURI(name) + "=" + encodeURI(value) + maxAgeSegment; 118 } 119 120 window.onscroll = function() {fixedFacets(facetsTopPosOriginal)}; 121 122 let facetsTopPosOriginal = document.getElementById("FacetsForm_Desktop_@Model.ID").getBoundingClientRect().top; 123 124 125 126 function fixedFacets(facetsTopPosOriginal){ 127 128 let scrollPosition = window.pageYOffset; 129 130 let headerBottomPos = document.getElementsByClassName("page-header")[0].getBoundingClientRect().bottom; 131 let footerTopPos = document.getElementsByClassName("page-footer")[0].getBoundingClientRect().top; 132 133 let facetsTop = document.getElementById("FacetsForm_Desktop_@Model.ID"); 134 let facetsTopPos = facetsTop.getBoundingClientRect().top; 135 let facetsBottomPos = facetsTop.getBoundingClientRect().bottom; 136 let facetsTopParent = facetsTop.parentElement; 137 138 let horizontalFacets; 139 let horizontalFacetsParent; 140 141 if (document.getElementsByClassName("sticky-facets-horizontal").length > 0 ){ 142 143 horizontalFacets = document.getElementsByClassName("sticky-facets-horizontal")[0]; 144 horizontalFacetsParent = document.getElementsByClassName("sticky-facets-horizontal")[0].parentElement; 145 146 } else { 147 148 horizontalFacets = document.getElementsByClassName("sticky-facets-horizontal-mobile")[0].parentElement; 149 horizontalFacetsParent = horizontalFacets.parentElement; 150 151 horizontalFacets.classList.add("sticky-mobile"); 152 153 } 154 155 156 if (facetsTopPosOriginal < scrollPosition + headerBottomPos ) { 157 facetsTop.classList.add("sticky"); 158 facetsTop.style.cssText = '--bs-columns:12; --sticky-top:' + headerBottomPos + 'px; width:' + facetsTopParent.offsetWidth + 'px'; 159 160 horizontalFacets.classList.add("sticky"); 161 //horizontalFacets.style.cssText = '--sticky-top:' + headerBottomPos + 'px; width:' + horizontalFacetsParent.offsetWidth + 'px'; 162 horizontalFacetsParent.style.setProperty('--sticky-top', headerBottomPos + 'px'); 163 horizontalFacets.style.cssText = 'width:' + horizontalFacetsParent.offsetWidth + 'px'; 164 165 166 } else { 167 facetsTop.classList.remove("sticky"); 168 horizontalFacets.classList.remove("sticky"); 169 } 170 } 171 172 </script> 173 } 174 175 if (layout == "horizontal") 176 { 177 @:</div> 178 } 179 180 bool showFiltersForThisGroup = false; 181 182 groupId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("GroupID")) ? Dynamicweb.Context.Current.Request.QueryString.Get("GroupID") : ""; 183 184 185 if (!string.IsNullOrEmpty(groupId)){ 186 187 var group = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(groupId); 188 189 190 foreach (var customfield in group.ProductGroupFieldValues) { 191 if (customfield.ProductGroupField.SystemName == "ShowProductFilters"){ 192 if (customfield.Value.ToString() == "True"){ 193 showFiltersForThisGroup = true; 194 } 195 } 196 197 } 198 } 199 200 if (showFiltersForThisGroup){ 201 202 //Mobile 203 <div class="d-block mt-lg-0 @(contentPadding)@(theme) sticky-facets-horizontal-mobile FacetsForm_Mobile_@Model.Item.SystemName.ToLower()_@Model.ID"> 204 <button type="button" class="btn btn-primary w-100 d-lg-none" data-bs-toggle="modal" data-bs-target="#FacetsModal"> 205 <span class="d-flex align-items-center"> 206 <span class="flex-grow-1 text-start"> 207 @Translate("Filter") @selectedFacetsLabel 208 </span> 209 <span class="icon-2"> 210 @ReadFile(iconPath + "sliders.svg") 211 </span> 212 </span> 213 </button> 214 215 <form method="post" action="@url" data-response-target-element="content" class="modal" id="FacetsModal" tabindex="-1" aria-hidden="false"> 216 <div class="modal-dialog modal-fullscreen"> 217 <div class="modal-content"> 218 <div class="modal-header@(modalTheme)"> 219 <h5 class="modal-title">@Translate("Filters and sorting")</h5> 220 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="document.querySelector('body').style = ''"></button> 221 </div> 222 <div class="modal-body@(modalTheme)"> 223 @{ 224 formFieldsParms["DeviceType"] = "mobile"; 225 } 226 @RenderPartial("Paragraph/ProductListFacets/FormFields.cshtml", Model, formFieldsParms) 227 </div> 228 <div class="modal-footer d-flex@(modalTheme)"> 229 @if (selectedFacetsCount != 0) 230 { 231 <button type="button" class="btn btn-secondary flex-fill" onclick="swift.ProductList.ResetFacets(event)">@Translate("Clear") (@selectedFacetsCount)</button> 232 } 233 <button type="button" class="btn btn-primary flex-fill" onclick="location.reload();">@Translate("Update")</button> 234 </div> 235 </div> 236 </div> 237 </form> 238 </div> 239 } 240 } 241 else 242 { 243 if (Pageview.IsVisualEditorMode) 244 { 245 <div class="alert alert-dark m-0" role="alert"> 246 <span>@Translate("Facets: The facets selectors will be shown here, if any")</span> 247 </div> 248 } 249 else if (productList.TotalProductsCount > 0) 250 { 251 @*<div class="alert alert-dark m-0" id="NoFiltersAlert_@Model.ID"> 252 @Translate("No filters are available") 253 </div>*@ 254 } 255 } 256
Error executing template "Designs/Swift/Paragraph/Swift_ProductListFacets.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_c6db31e380674422a74725ff81e9ab25.Execute() in D:\dynamicweb.net\Solutions\FlexMedia\siso2021.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductListFacets.cshtml:line 190
   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.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using Dynamicweb.Frontend.Navigation 4 @using Dynamicweb.Environment 5 @using Dynamicweb.Core.Encoders 6 @using System.Text.RegularExpressions 7 @using System.Web 8 @using Dynamicweb.Core 9 @using System.Linq 10 11 @{ 12 ProductListViewModel productList = new ProductListViewModel(); 13 if (Dynamicweb.Context.Current.Items.Contains("ProductList")) 14 { 15 productList = (ProductListViewModel)Dynamicweb.Context.Current.Items["ProductList"]; 16 } 17 18 string url = Pageview.SearchFriendlyUrl; 19 url = url.LastIndexOf("?") != -1 ? url.Substring(0, url.LastIndexOf("?")) : url; 20 21 string groupId = string.Empty; 22 23 //Fix for non-friendly urls 24 if (Dynamicweb.Context.Current.Request.QueryString.Get("GroupID") != null) 25 { 26 groupId = Dynamicweb.Context.Current.Request.QueryString.Get("GroupID"); 27 url += "?GroupID=" + groupId; 28 } 29 30 if (!url.Contains("LayoutTemplate")) 31 { 32 url += url.Contains("?") ? "&LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml" : "?LayoutTemplate=Designs/Swift/Swift_PageClean.cshtml"; 33 } 34 35 bool facetsFound = false; 36 int selectedFacetsCount = 0; 37 38 if (productList.FacetGroups != null) 39 { 40 foreach (FacetGroupViewModel facetGroup in productList.FacetGroups) 41 { 42 foreach (FacetViewModel facet in facetGroup.Facets) 43 { 44 if (facet.Options.Count() > 0) 45 { 46 facetsFound = true; 47 48 foreach (FacetOptionViewModel option in facet.Options) 49 { 50 if (option.Selected) 51 { 52 selectedFacetsCount++; 53 } 54 } 55 } 56 } 57 } 58 } 59 60 bool enableSorting = Model.Item.GetBoolean("SortByNameAZ"); 61 enableSorting = Model.Item.GetBoolean("SortByNameZA") || enableSorting == true ? true : false; 62 enableSorting = Model.Item.GetBoolean("SortByNewest") || enableSorting == true ? true : false; 63 enableSorting = Model.Item.GetBoolean("SortByLowestPrice") || enableSorting == true ? true : false; 64 enableSorting = Model.Item.GetBoolean("SortByHighestPrice") || enableSorting == true ? true : false; 65 66 string contentPadding = Model.Item.GetRawValueString("ContentPadding", string.Empty); 67 contentPadding = contentPadding == "none" ? " px-0 py-2" : contentPadding; 68 contentPadding = contentPadding == "small" ? " p-3" : contentPadding; 69 70 string layout = Model.Item.GetRawValueString("Layout", "vertical"); 71 72 var formFieldsParms = new Dictionary<string, object>(); 73 formFieldsParms.Add("DeviceType", "desktop"); 74 } 75 76 @if (productList.TotalProductsCount > 0 && (facetsFound || Model.Item.GetBoolean("EnableGroupNavigation") || enableSorting)) 77 { 78 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : string.Empty; 79 string modalTheme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("ModalTheme")) ? " theme " + Model.Item.GetRawValueString("ModalTheme").Replace(" ", "").Trim().ToLower() : string.Empty; 80 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 81 string selectedFacetsLabel = selectedFacetsCount > 0 ? "(" + selectedFacetsCount + ")" : string.Empty; 82 string formContainerCss = layout == "horizontal" ? $"d-lg-flex gap-3 flex-row flex-wrap {theme}" : $"d-lg-block h-100 {theme}"; 83 84 //Desktop 85 if (layout == "horizontal") 86 { 87 contentPadding = contentPadding == "small" ? " p-3" : contentPadding; 88 @:<div class="@theme @contentPadding h-100"> 89 } 90 91 <form method="post" action="@url" data-response-target-element="content" id="FacetsForm_Desktop_@Model.ID" class="d-none @formContainerCss item_@Model.Item.SystemName.ToLower()"> 92 @RenderPartial("Paragraph/ProductListFacets/FormFields.cshtml", Model, formFieldsParms) 93 94 @if (layout == "horizontal" && selectedFacetsCount > 0) 95 { 96 <button type="button" class="btn btn-sm me-sm-1 me-lg-2" onclick="swift.ProductList.ResetFacets(event)"><span class="icon-2">@ReadFile(iconPath + "rotate-ccw.svg")</span> @Translate("Clear filters")</button> 97 } 98 </form> 99 100 if (layout == "vertical") { 101 <script> 102 103 function lastOpened (e){ 104 105 106 if (e.classList.contains('collapsed')){ 107 setCookie("LastOpenedFacet", 0, 0); 108 } else { 109 setCookie("LastOpenedFacet", e.innerText, 10); 110 } 111 112 113 } 114 115 function setCookie(name, value, maxAgeSeconds) { 116 var maxAgeSegment = "; max-age=" + maxAgeSeconds; 117 document.cookie = encodeURI(name) + "=" + encodeURI(value) + maxAgeSegment; 118 } 119 120 window.onscroll = function() {fixedFacets(facetsTopPosOriginal)}; 121 122 let facetsTopPosOriginal = document.getElementById("FacetsForm_Desktop_@Model.ID").getBoundingClientRect().top; 123 124 125 126 function fixedFacets(facetsTopPosOriginal){ 127 128 let scrollPosition = window.pageYOffset; 129 130 let headerBottomPos = document.getElementsByClassName("page-header")[0].getBoundingClientRect().bottom; 131 let footerTopPos = document.getElementsByClassName("page-footer")[0].getBoundingClientRect().top; 132 133 let facetsTop = document.getElementById("FacetsForm_Desktop_@Model.ID"); 134 let facetsTopPos = facetsTop.getBoundingClientRect().top; 135 let facetsBottomPos = facetsTop.getBoundingClientRect().bottom; 136 let facetsTopParent = facetsTop.parentElement; 137 138 let horizontalFacets; 139 let horizontalFacetsParent; 140 141 if (document.getElementsByClassName("sticky-facets-horizontal").length > 0 ){ 142 143 horizontalFacets = document.getElementsByClassName("sticky-facets-horizontal")[0]; 144 horizontalFacetsParent = document.getElementsByClassName("sticky-facets-horizontal")[0].parentElement; 145 146 } else { 147 148 horizontalFacets = document.getElementsByClassName("sticky-facets-horizontal-mobile")[0].parentElement; 149 horizontalFacetsParent = horizontalFacets.parentElement; 150 151 horizontalFacets.classList.add("sticky-mobile"); 152 153 } 154 155 156 if (facetsTopPosOriginal < scrollPosition + headerBottomPos ) { 157 facetsTop.classList.add("sticky"); 158 facetsTop.style.cssText = '--bs-columns:12; --sticky-top:' + headerBottomPos + 'px; width:' + facetsTopParent.offsetWidth + 'px'; 159 160 horizontalFacets.classList.add("sticky"); 161 //horizontalFacets.style.cssText = '--sticky-top:' + headerBottomPos + 'px; width:' + horizontalFacetsParent.offsetWidth + 'px'; 162 horizontalFacetsParent.style.setProperty('--sticky-top', headerBottomPos + 'px'); 163 horizontalFacets.style.cssText = 'width:' + horizontalFacetsParent.offsetWidth + 'px'; 164 165 166 } else { 167 facetsTop.classList.remove("sticky"); 168 horizontalFacets.classList.remove("sticky"); 169 } 170 } 171 172 </script> 173 } 174 175 if (layout == "horizontal") 176 { 177 @:</div> 178 } 179 180 bool showFiltersForThisGroup = false; 181 182 groupId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("GroupID")) ? Dynamicweb.Context.Current.Request.QueryString.Get("GroupID") : ""; 183 184 185 if (!string.IsNullOrEmpty(groupId)){ 186 187 var group = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(groupId); 188 189 190 foreach (var customfield in group.ProductGroupFieldValues) { 191 if (customfield.ProductGroupField.SystemName == "ShowProductFilters"){ 192 if (customfield.Value.ToString() == "True"){ 193 showFiltersForThisGroup = true; 194 } 195 } 196 197 } 198 } 199 200 if (showFiltersForThisGroup){ 201 202 //Mobile 203 <div class="d-block mt-lg-0 @(contentPadding)@(theme) sticky-facets-horizontal-mobile FacetsForm_Mobile_@Model.Item.SystemName.ToLower()_@Model.ID"> 204 <button type="button" class="btn btn-primary w-100 d-lg-none" data-bs-toggle="modal" data-bs-target="#FacetsModal"> 205 <span class="d-flex align-items-center"> 206 <span class="flex-grow-1 text-start"> 207 @Translate("Filter") @selectedFacetsLabel 208 </span> 209 <span class="icon-2"> 210 @ReadFile(iconPath + "sliders.svg") 211 </span> 212 </span> 213 </button> 214 215 <form method="post" action="@url" data-response-target-element="content" class="modal" id="FacetsModal" tabindex="-1" aria-hidden="false"> 216 <div class="modal-dialog modal-fullscreen"> 217 <div class="modal-content"> 218 <div class="modal-header@(modalTheme)"> 219 <h5 class="modal-title">@Translate("Filters and sorting")</h5> 220 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" onclick="document.querySelector('body').style = ''"></button> 221 </div> 222 <div class="modal-body@(modalTheme)"> 223 @{ 224 formFieldsParms["DeviceType"] = "mobile"; 225 } 226 @RenderPartial("Paragraph/ProductListFacets/FormFields.cshtml", Model, formFieldsParms) 227 </div> 228 <div class="modal-footer d-flex@(modalTheme)"> 229 @if (selectedFacetsCount != 0) 230 { 231 <button type="button" class="btn btn-secondary flex-fill" onclick="swift.ProductList.ResetFacets(event)">@Translate("Clear") (@selectedFacetsCount)</button> 232 } 233 <button type="button" class="btn btn-primary flex-fill" onclick="location.reload();">@Translate("Update")</button> 234 </div> 235 </div> 236 </div> 237 </form> 238 </div> 239 } 240 } 241 else 242 { 243 if (Pageview.IsVisualEditorMode) 244 { 245 <div class="alert alert-dark m-0" role="alert"> 246 <span>@Translate("Facets: The facets selectors will be shown here, if any")</span> 247 </div> 248 } 249 else if (productList.TotalProductsCount > 0) 250 { 251 @*<div class="alert alert-dark m-0" id="NoFiltersAlert_@Model.ID"> 252 @Translate("No filters are available") 253 </div>*@ 254 } 255 } 256
Locking Pin, Springloaded, Brass Body, SS Spring & Pin ø7.5m
Locking Pin, Springloaded, Brass Body, SS Spring & Pin ø7.5m

Locking Pin, Springloaded, Brass Body, SS Spring & Pin ø7.5m

Item number: 04.05.085-1
Multifunctional Leg Bracket "Curly", Black PC/ABS,ø115x85mm,
Multifunctional Leg Bracket

Multifunctional Leg Bracket "Curly", Black PC/ABS, ø115x85mm,

Item number: 06.11.050-0
Stacking Bumper F/Multifunctional Leg Bracket "Curly", Black
Stacking Bumper F/Multifunctional Leg Bracket

Stacking Bumper F/Multifunctional Leg Bracket "Curly", Black

Item number: 06.11.055-0
Table Leg Connector "Twister", ø107x27mm, Black PC, W/Angle
Table Leg Connector

Table Leg Connector "Twister", ø107x27mm, Black PC, W/Angle

Item number: 06.11.100-1
Aluminum Disc F/Twister, F/UV-Glue, ø108x10mm,
Aluminum Disc F/Twister, F/UV-Glue, ø108x10mm,

Aluminum Disc F/Twister, F/UV-Glue, ø108x10mm,

Item number: 06.11.121-0
"Twist´n Turn" Leg Connector,M10,Black PA,W/Angle Adjustment

"Twist´n Turn" Leg Connector, M10, Black PA, W/Angle Adjustment

Item number: 06.11.130-0
"Twist´n Turn" Leg Connector, M8,Black PA,W/Angle Adjustment

"Twist´n Turn" Leg Connector, M8, Black PA, W/Angle Adjustment

Item number: 06.11.135-0
"Rima" Leg Connector, Black PC/ABS, F/Square Legs, W/Spring

"Rima" Leg Connector, Black PC/ABS, F/Square Legs, W/Spring

Item number: 06.11.140-0
Angle Wedge For "Rima" Leg Connector,5DG Angle,Black PC/ABS
Angle Wedge For

Angle Wedge For "Rima" Leg Connector, 5DG Angle, Black PC/ABS

Item number: 06.11.145-0
Leg Connector "Mini-Twister", SS304, Black
Leg Connector

Leg Connector "Mini-Twister", SS304, Black

Item number: 06.11.200-0
Leg Connector "Mini-Twister", SS304, Raw
Leg Connector

Leg Connector "Mini-Twister", SS304, Raw

Item number: 06.11.201-0
Leg Connector "Conan", SS304, Black, F/Slanted Legs, (Screws
Leg Connector

Leg Connector "Conan", SS304, Black, F/Slanted Legs, (Screws

Item number: 06.11.210-0
12 out of 342 products
< 1 2 ... 28 29 >