Error executing template "Designs/Swift-v2/eCom/ProductCatalog/VariantSelector.cshtml"
System.InvalidCastException: Unable to cast object of type 'Dynamicweb.Ecommerce.ProductCatalog.ProductListViewModel' to type 'Dynamicweb.Ecommerce.ProductCatalog.ProductViewModel'.
   at RazorEngine.Templating.TemplateBase`1.SetModel(Object model)
   at RazorEngine.Templating.TemplateBase.SetData(Object model, DynamicViewBag viewbag)
   at RazorEngine.Templating.RazorEngineCore.CreateTemplate(ICompiledTemplate template, Object model, DynamicViewBag viewbag)
   at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, 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 RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 82
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in E:\A10\_w\2\s\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 14
   at Dynamicweb.Rendering.Template.RenderRazorTemplate() in E:\A10\_w\2\s\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 805

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.Rendering 4 @using Dynamicweb.Ecommerce.ProductCatalog 5 @using System.Globalization 6 7 @functions{ 8 string DoubleToString(double? value) 9 { 10 if (value.HasValue) 11 { 12 return value.Value.ToString(CultureInfo.InvariantCulture); 13 } 14 return null; 15 } 16 } 17 18 @{ 19 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 20 { 21 Dynamicweb.Context.Current.Items["ProductDetails"] = Model; 22 } 23 else 24 { 25 Dynamicweb.Context.Current.Items.Add("ProductDetails", Model); 26 } 27 28 string viewType = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("ViewType")) ? Dynamicweb.Context.Current.Request.Form.Get("ViewType") : string.Empty; 29 bool quantitySelector = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("QuantitySelector")) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.Form.Get("QuantitySelector")) : false; 30 31 string url = "/Default.aspx?ID=" + (GetPageIdByNavigationTag("CartService")); 32 if (!url.Contains("LayoutTemplate")) 33 { 34 url += url.Contains("?") ? "&LayoutTemplate=Swift-v2_MiniCart.cshtml" : "?LayoutTemplate=Swift-v2_MiniCart.cshtml"; 35 } 36 37 //Basic ParagraphViewModel setting 38 var paragraphViewModel = new ParagraphViewModel() 39 { 40 ID = 123456789 41 }; 42 43 string buttonLayout = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("ButtonLayout")) ? Dynamicweb.Context.Current.Request.Form.Get("ButtonLayout") : string.Empty; 44 string buttonAspectRatio = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("ButtonAspectRatio")) ? Dynamicweb.Context.Current.Request.Form.Get("ButtonAspectRatio") : string.Empty; 45 46 var parms = new Dictionary<string, object>(); 47 parms.Add("ButtonLayout", buttonLayout); 48 parms.Add("ButtonAspectRatio", buttonAspectRatio); 49 } 50 51 @if (Model.VariantInfo?.VariantInfo != null) 52 { 53 if (viewType == "ModalContent") 54 { 55 string disableAddToCart = null; 56 double? stepQty = Model.PurchaseQuantityStep > 0 ? Model.PurchaseQuantityStep : 1; 57 double? minQty = Model.PurchaseMinimumQuantity > 0 ? Model.PurchaseMinimumQuantity : 1; 58 double? maxQty = null; 59 double? valueQty = minQty > stepQty ? minQty : stepQty; 60 bool isStockType = Model.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock; 61 if (isStockType) 62 { 63 if (Model.NeverOutOfstock) 64 { 65 disableAddToCart = "disabled"; 66 } 67 else 68 { 69 disableAddToCart = (Model.StockLevel <= 0) || Model.Discontinued ? "disabled" : disableAddToCart; 70 maxQty = Model.StockLevel; 71 } 72 } 73 74 disableAddToCart = string.IsNullOrEmpty(Model.VariantId) ? "disabled" : disableAddToCart; 75 76 <div class="modal-header"> 77 <h5 class="modal-title">@Model.Name</h5> 78 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 79 </div> 80 <div class="modal-body"> 81 @RenderPartial("Components/VariantSelector.cshtml", paragraphViewModel, parms) 82 </div> 83 <div class="modal-footer"> 84 <form method="post" action="@url"> 85 <input type="hidden" name="redirect" value="false"> 86 <input type="hidden" name="ProductName" value="@Model.Name"> 87 <input type="hidden" name="ProductVariantName" value="@Model.VariantName"> 88 <input type="hidden" name="ProductId" value="@Model.Id"> 89 <input type="hidden" name="VariantId" value="@Model.VariantId" id="VariantIdField_@Model.Id"> 90 <input type="hidden" name="ProductReferer" value="variant_selector"> 91 <input type="hidden" name="cartcmd" value="add"> 92 93 <input type="hidden" name="ProductCurrency" value="@Dynamicweb.Ecommerce.Common.Context.Currency.Code"> 94 <input type="hidden" name="ProductReferer" value="variant_selector_modal"> 95 <input type="hidden" name="ProductPrice" value="@Model.Price.ToStringInvariant()"> 96 97 <template class="js-step-quantity-warning"> 98 <div class="modal-header"> 99 <h5 class="modal-title">@Translate("The quantity is not valid")</h5> 100 </div> 101 <div class="modal-body"> 102 <p class="text-muted">@Translate("Please select a quantity that is dividable by") @stepQty</p> 103 </div> 104 </template> 105 106 <template class="js-min-quantity-warning"> 107 <div class="modal-header"> 108 <h5 class="modal-title">@Translate("The product could not be added to the cart")</h5> 109 </div> 110 <div class="modal-body"> 111 <p class="text-muted">@Translate("The quantity is not valid. You must buy at least") @Model.PurchaseMinimumQuantity</p> 112 </div> 113 </template> 114 115 <template class="js-value-missing-warning"> 116 <div class="modal-header"> 117 <h5 class="modal-title">@Translate("No amount specified")</h5> 118 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 119 </div> 120 <div class="modal-body"> 121 <p class="text-muted">@Translate("Specify an amount to add to the cart")</p> 122 </div> 123 </template> 124 125 @if (quantitySelector) 126 { 127 <div class="d-flex flex-fill flex-column flex-sm-row gap-2"> 128 @RenderPartial("Components/QuantitySelector.cshtml", Model) 129 <button type="button" onclick="swift.Cart.Update(event)" class="btn btn-primary flex-fill js-add-to-cart-button" data-dw-button="primary" title="@Translate("Add to cart")" id="AddToCartButton@(Model.Id)_@Pageview.CurrentParagraph.ID" @disableAddToCart>@Translate("Add to cart")</button> 130 131 <div class="invalid-feedback d-none"> 132 @Translate("Please select a quantity that is dividable by") @stepQty 133 </div> 134 135 </div> 136 <label for="Quantity_@(Model.Id)_@Model.VariantId" class="visually-hidden">@Translate("Quantity")</label> 137 } 138 else 139 { 140 <input id="Quantity_@(Model.Id)_@Model.VariantId" name="Quantity" value="@DoubleToString(valueQty)" type="hidden" @disableAddToCart> 141 <button type="button" onclick="swift.Cart.Update(event)" class="btn btn-primary flex-fill js-add-to-cart-button" data-dw-button="primary" title="@Translate("Add to cart")" id="AddToCartButton@(Model.Id)_@Pageview.CurrentParagraph.ID" @disableAddToCart>@Translate("Add to cart")</button> 142 } 143 </form> 144 </div> 145 } 146 else 147 { 148 @RenderPartial("Components/VariantSelector.cshtml", paragraphViewModel) 149 } 150 151 <script type="module"> 152 swift.VariantSelector.init(); 153 </script> 154 } 155