Error executing template "Designs/Swift/eCom/ProductCatalog/COMM_ProductSliderComponent.cshtml"
System.ArgumentException: Paragraph ID must be greater than 0, but it was 0
   at Dynamicweb.Core.Ensure.That[TException](Boolean condition, String message)
   at Dynamicweb.Content.ParagraphService.GetParagraph(Int32 paragraphId)
   at CompiledRazorTemplates.Dynamic.RazorEngine_c51627ff08b7467a94050c7841ffc0bf.Execute() in C:\inetpub\wwwroot\AllMedia\Production\Files\Templates\Designs\Swift\eCom\ProductCatalog\COMM_ProductSliderComponent.cshtml:line 58
   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 ViewModelTemplate<ProductListViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.Rendering 4 @using Dynamicweb.Ecommerce.ProductCatalog 5 @using Dynamicweb.Environment 6 7 @functions { 8 public ProductViewModel GetDummyProduct() 9 { 10 ProductViewModel product = new ProductViewModel(); 11 12 ProductViewModelSettings productSetting = new ProductViewModelSettings 13 { 14 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 15 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 16 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 17 ShopId = Pageview.Area.EcomShopId 18 }; 19 20 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 21 { 22 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 23 } 24 else 25 { 26 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 27 } 28 29 return product; 30 } 31 32 private bool AllowTracking() 33 { 34 bool allowTracking = true; 35 if (CookieManager.IsCookieManagementActive) 36 { 37 var cookieOptInLevel = CookieManager.GetCookieOptInLevel(); 38 var cookieOptInCategories = CookieManager.GetCookieOptInCategories(); 39 40 bool consentEither = (cookieOptInCategories.Contains("Statistical") || cookieOptInCategories.Contains("Marketing")); 41 bool consentFunctional = cookieOptInLevel == CookieOptInLevel.Functional; 42 bool consentAtLeastOne = cookieOptInLevel == CookieOptInLevel.All || (consentFunctional && consentEither); 43 44 allowTracking = consentAtLeastOne; 45 } 46 return allowTracking; 47 } 48 } 49 50 @{ 51 string googleAnalyticsTrackingID = Pageview.AreaSettings.GetString("GoogleAnalyticsTrackingID"); 52 string googleAnalyticsMeasurementID = Pageview.AreaSettings.GetString("GoogleAnalyticsMeasurementID"); 53 var cookieOptInLevel = CookieManager.GetCookieOptInLevel(); 54 bool allowTracking = AllowTracking(); //cookieOptInLevel == CookieOptInLevel.All || (cookieOptInLevel == CookieOptInLevel.Functional && CookieManager.GetCookieOptInCategories().Contains("Statistical")); 55 56 int paragraphId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("ParagraphId")) ? Convert.ToInt32(Dynamicweb.Context.Current.Request.Form.Get("ParagraphId")) : 0; 57 58 var paragraph = Dynamicweb.Services.Paragraphs?.GetParagraph(paragraphId) ?? null; 59 ParagraphInfoViewModel paragraphViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreateParagraphInfoViewModel(paragraph); 60 61 string contentPadding = paragraphViewModel.Item.GetRawValueString("ContentPadding"); 62 63 int listItemSourcePageId = paragraphViewModel.Item.GetInt32("ListComponentSource"); 64 var page = listItemSourcePageId != 0 ? Dynamicweb.Services.Pages.GetPage(listItemSourcePageId) : null; 65 string headingTitle = Dynamicweb.Context.Current.Request.Form["HeadingTitle"]; 66 string headingFormatted = ""; 67 68 } 69 70 71 72 73 @if (paragraphViewModel != null && page != null) 74 { 75 if (Model.Products.Any()) 76 { 77 int modelId = paragraphViewModel.ID; 78 79 string navigationStyle = $"{paragraphViewModel.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 80 string navigationPlacement = $"{paragraphViewModel.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 81 string indicatorStyle = $"{paragraphViewModel.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; 82 string revealSlides = paragraphViewModel.Item.GetRawValueString("RevealSlides", "no-reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 83 string sliderItemsGap = paragraphViewModel.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; 84 string navigationAlwaysVisible = (paragraphViewModel.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 85 string navigationVisibleOnTouch = (paragraphViewModel.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 86 string navigationShowScrollbar = (paragraphViewModel.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 87 string scrollBarForceMobile = (paragraphViewModel.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; 88 string navigationSmall = (paragraphViewModel.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 89 string navigationInvertColors = (paragraphViewModel.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 90 string navigationSlideEntirePage = (paragraphViewModel.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 91 string navigationNoLoop = (paragraphViewModel.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 92 string indicatorsOutsideSlider = (paragraphViewModel.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 93 string indicatorsHighlightActive = (paragraphViewModel.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 94 string indicatorsInvertColors = (paragraphViewModel.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 95 string indicatorsVisibleOnSmallDevices = (paragraphViewModel.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 96 string animation = paragraphViewModel.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {paragraphViewModel.Item.GetRawValueString("Animation")}" : string.Empty; 97 string autoplay = (paragraphViewModel.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; 98 string autoplayInterval = paragraphViewModel.Item.GetRawValueString("AutoplayInterval", string.Empty); 99 bool hideSliderNavigation = false; 100 101 string gridColumnSize = paragraphViewModel.Item.GetRawValueString("SliderLayout", "3"); 102 int itemsShown = Convert.ToInt32(gridColumnSize); 103 104 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(page); 105 string listItemTheme = " theme " + pageViewModel.Item.GetRawValueString("Theme", string.Empty).Replace(" ", "").Trim().ToLower(); 106 string listItemPadding = pageViewModel.Item.GetRawValueString("ContentPadding", string.Empty); 107 string listItemPaddingClass = string.Empty; 108 109 switch (listItemPadding) 110 { 111 case "small": 112 listItemPaddingClass = " p-2 p-xl-3"; 113 break; 114 case "large": 115 listItemPaddingClass = " p-3 p-xl-4"; 116 break; 117 case "small-x": 118 listItemPaddingClass = " px-2 px-md-3"; 119 break; 120 case "large-x": 121 listItemPaddingClass = " px-3 px-md-4"; 122 break; 123 } 124 125 if (navigationStyle == "slider-nav-none") 126 { 127 hideSliderNavigation = true; 128 } 129 if(!string.IsNullOrEmpty(headingTitle)) { 130 <h2 style="color: #0548B8;" class="m-0">@Translate(headingTitle)</h2> 131 } 132 133 if(!string.IsNullOrEmpty(headingTitle)) { 134 headingFormatted = headingTitle.Replace(" ","_"); 135 } 136 137 138 <div class="grid gap-0 @contentPadding"> 139 <div id="slider_@(modelId)_@(headingFormatted)" class="g-col-12 swiffy-slider slider-item-show@(itemsShown) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage)" style="--swiffy-slider-nav-light:var(--swift-foreground-color);--swiffy-slider-nav-dark:var(--swift-background-color);@(scrollBarForceMobile)"> 140 <ul class="slider-container"> 141 @foreach (ProductViewModel product in Model.Products) 142 { 143 string detailsPageLink = !string.IsNullOrEmpty(GetPageIdByNavigationTag("Shop").ToString()) ? GetPageIdByNavigationTag("Shop").ToString() : string.Empty; 144 string selectedDetailPage = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(product.PrimaryOrDefaultGroup.Id)?.Meta.PrimaryPage ?? string.Empty; 145 string detailsPageId = detailsPageLink != string.Empty ? detailsPageLink.Substring(detailsPageLink.LastIndexOf('=') + 1) : string.Empty; 146 string selectedDetailPageId = selectedDetailPage != string.Empty ? selectedDetailPage.Substring(selectedDetailPage.LastIndexOf('=') + 1) : string.Empty; 147 detailsPageId = string.IsNullOrEmpty(selectedDetailPage) ? detailsPageId : selectedDetailPageId; 148 149 string variantIdForLink = !string.IsNullOrEmpty(product.VariantId) ? $"&VariantID={product.VariantId}" : ""; 150 variantIdForLink = string.IsNullOrEmpty(variantIdForLink) && !string.IsNullOrEmpty(product.DefaultVariantId) ? $"&VariantID={product.DefaultVariantId}" : variantIdForLink; 151 152 string link = "Default.aspx?ID=" + GetPageIdByNavigationTag("Shop"); 153 link += $"&GroupID={product.PrimaryOrDefaultGroup.Id}"; 154 link += $"&ProductID={product.Id}"; 155 link += variantIdForLink; 156 link = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(link); 157 158 string clickProductLink = string.Empty; 159 if (!string.IsNullOrWhiteSpace(googleAnalyticsMeasurementID) && allowTracking) 160 { 161 clickProductLink = "onclick=\"return clickProductLink('" + @product.Id + "', '" + @product.Name + "', '" + @product.VariantName + "', '" + @product.Price.CurrencyCode + "', '" + @product.Price.Price + "')\""; 162 } 163 164 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 165 { 166 Dynamicweb.Context.Current.Items["ProductDetails"] = product; 167 } 168 else 169 { 170 Dynamicweb.Context.Current.Items.Add("ProductDetails", product); 171 } 172 173 <li class="d-flex flex-column @listItemTheme @listItemPaddingClass"> 174 <a href="@link" class="stretched-link" @clickProductLink> 175 <span class="visually-hidden">@product.Name</span> 176 </a> 177 @{ 178 @RenderGrid(listItemSourcePageId) 179 } 180 </li> 181 } 182 183 @if (!Model.Products.Any() && Pageview.IsVisualEditorMode) 184 { 185 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 186 { 187 Dynamicweb.Context.Current.Items["ProductDetails"] = GetDummyProduct(); 188 } 189 else 190 { 191 Dynamicweb.Context.Current.Items.Add("ProductDetails", GetDummyProduct()); 192 } 193 194 for (int i = 0; i < 4; i++) 195 { 196 <li class="d-flex flex-column @listItemTheme @listItemPaddingClass"> 197 @{ 198 @RenderGrid(listItemSourcePageId) 199 } 200 </li> 201 } 202 } 203 </ul> 204 205 @if (!hideSliderNavigation) 206 { 207 <button type="button" title="@Translate("Previous slide")" class="slider-nav" style="z-index:2;"> 208 <span class="visually-hidden">@Translate("Previous slide")</span> 209 </button> 210 <button type="button" title="@Translate("Next slide")" class="slider-nav slider-nav-next" style="z-index:2;"> 211 <span class="visually-hidden">@Translate("Next slide")</span> 212 </button> 213 } 214 215 @if (indicatorStyle != "slider-indicators-hidden") 216 { 217 bool isActive = true; 218 int slideCount = 1; 219 var counting = 1; 220 221 <div class="slider-indicators typer" style="z-index:2;"> 222 223 @foreach (var item in Model.Products) 224 { 225 if(counting == itemsShown){ 226 <button @(isActive ? "class=\"active\"" : string.Empty) type="button" title='@Translate("Go to slide") @slideCount'> 227 <span class="visually-hidden">@Translate("Go to slide") @slideCount</span> 228 </button> 229 counting = 1; 230 } 231 { 232 slideCount++; 233 counting ++; 234 } 235 isActive = false; 236 } 237 </div> 238 } 239 </div> 240 </div> 241 242 <script type="module"> 243 swiffyslider.initSlider(document.querySelector('#slider_@(modelId)_@(headingFormatted)')); 244 </script> 245 } 246 } 247 else if (Pageview.IsVisualEditorMode == true) 248 { 249 <div class="alert alert-dark" role="alert"> 250 <span>@Translate("Product component slider: The slider will be rendered here, if there is anything to show")</span> 251 </div> 252 } 253