Error executing template "Designs/Swift-v2/eCom/ProductCatalog/Favorites_Custom.cshtml"
System.InvalidCastException: Unable to cast object of type 'Core.ViewModels.Ecommerce.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)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites 3 @using Dynamicweb.Rendering 4 @using Dynamicweb.Ecommerce.ProductCatalog 5 @using Dynamicweb.Frontend.Classic.Api.Controllers 6 7 @{ 8 string iconPath = "/Files/Templates/Designs/Swift-v2/Assets/images/custom-icons/"; 9 string productId = Model.Id; 10 string variantId = Model.VariantId; 11 string productImage = string.IsNullOrEmpty(Model.DefaultImage?.Value) ? "" : "/Admin/Public/GetImage.ashx?Image=" + Model.DefaultImage.Value + "&width=80&format=webp"; 12 //productImage = !Model.DefaultImage.Value.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase) ? Model.DefaultImage.Value : productImage; 13 bool isInFavoriteList; 14 15 IEnumerable<FavoriteList> favoreiteLists = Pageview.User.GetFavoriteLists(); 16 int favoriteListTotal = favoreiteLists.Count(); 17 18 int favoriteListId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("FavoriteListId")) ? Convert.ToInt32(Dynamicweb.Context.Current.Request.QueryString.Get("FavoriteListId")) : 0; 19 bool showButtonText = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ShowButtonText")) ? Convert.ToBoolean(Dynamicweb.Context.Current.Request.QueryString.Get("ShowButtonText")) : false; 20 21 if (favoreiteLists.Count() == 1) 22 { 23 favoriteListId = favoreiteLists.FirstOrDefault().ListId; 24 } 25 } 26 27 @if (favoriteListTotal < 2) 28 { 29 isInFavoriteList = Pageview.User.IsProductInFavoriteList(favoriteListId, productId, variantId); 30 string defaultCommand = isInFavoriteList ? "remove" : "add"; 31 string filledFavoriteIcon = isInFavoriteList ? "" : "d-none"; 32 string outlineFavoriteIcon = isInFavoriteList ? "d-none" : ""; 33 34 if (favoreiteLists.Count() == 0 && favoriteListId == 0) 35 { 36 isInFavoriteList = false; 37 } 38 39 if (favoreiteLists.Count() == 1 && favoriteListId == 0) { 40 isInFavoriteList = true; 41 } 42 43 <form action="@Pageview.SearchFriendlyUrl.Replace("FavoriteListId=0", $"FavoriteListId={favoriteListId}")" id="FavoriteToggleForm_@productId@variantId.Replace(".", "")" data-product-id="@productId" data-variant-id="@variantId"> 44 <input type="hidden" name="ReloadPage" value="false"> 45 <input type="hidden" name="FavoriteListId" value="@favoriteListId"> 46 <input type="hidden" name="UserId" value="@Pageview.User.ID"> 47 <input type="hidden" name="ProductName" value="@Model.Name"> 48 49 @if (!string.IsNullOrEmpty(Model.DefaultImage?.Value)) 50 { 51 <input type="hidden" name="Thumbnail" value="@productImage"> 52 } 53 @if (isInFavoriteList) 54 { 55 <input type="hidden" name="FavoriteCmd" value="removeproductfromfavoritelist"> 56 } 57 else 58 { 59 <input type="hidden" name="FavoriteCmd" value="addproducttofavoritelist"> 60 } 61 </form> 62 63 <script> 64 swift.Favorites.Update('FavoriteToggleForm_@productId@variantId.Replace(".", "")'); 65 </script> 66 67 <div class="favorite-icon btn-icon--addtofavorites"> 68 <span class="in-list text-nowrap @filledFavoriteIcon"> 69 <span class="icon-2">@ReadFile(iconPath + "tingstad-addtofavorites-on.svg")</span> 70 @if (showButtonText) 71 { 72 <span class="ms-1">@Translate("Remove from favorites")</span> 73 } 74 </span> 75 <span class="not-in-list text-nowrap @outlineFavoriteIcon"> 76 <span class="icon-2">@ReadFile(iconPath + "tingstad-addtofavorites-off.svg")</span> 77 @if (showButtonText) 78 { 79 <span class="ms-1">@Translate("Add to favorites")</span> 80 } 81 </span> 82 </div> 83 } 84 else 85 { 86 IEnumerable<FavoriteList> favoriteLists = Pageview.User.GetFavoriteLists(); 87 int favoriteListsLink = GetPageIdByNavigationTag("FavoriteListPage"); 88 89 <div class="offcanvas-header justify-content-between"> 90 <h5 class="offcanvas-title fs-6 fw-normal">@Translate("Save") <span class="fw-bold">@Model.Name</span> @Translate("for later")</h5> 91 <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button> 92 </div> 93 <div class="offcanvas-body"> 94 <form method="post" action="@Pageview.SearchFriendlyUrl" class="d-flex flex-column h-100" data-product-id="@productId" data-variant-id="@variantId"> 95 <input type="hidden" name="FavoriteCmd" value=""> 96 <input type="hidden" name="FavoriteListId" value="@favoriteListId"> 97 <input type="hidden" name="UserId" value="@Pageview.User.ID"> 98 99 <input type="hidden" name="ProductId" value="@Model.Id"> 100 <input type="hidden" name="ProductName" value="@Model.Name"> 101 <input type="hidden" name="ProductCurrency" value="@Model.Price.CurrencyCode"> 102 <input type="hidden" name="ProductPrice" value="@Model.Price.ToStringInvariant()"> 103 104 @if (!string.IsNullOrEmpty(Model.DefaultImage?.Value)) 105 { 106 <input type="hidden" name="Thumbnail" value="@productImage"> 107 } 108 109 <div class="flex-fill overflow-auto"> 110 <ul class="list-group"> 111 @foreach (FavoriteList list in favoriteLists) 112 { 113 string listName = !string.IsNullOrEmpty(list.Name) ? list.Name : Translate("My favorites"); 114 bool isInThisFavoriteList = Pageview.User.IsProductInFavoriteList(list.ListId, productId, variantId); 115 string defaultCommand = isInThisFavoriteList ? "remove" : "add"; 116 117 <li class="list-group-item"> 118 <button type="button" class="btn text-start d-flex align-items-center w-100 swift_favorites-button btn-icon--addtofavorites" data-bs-dismiss="offcanvas"> 119 <span class="flex-fill me-2">@listName</span> 120 121 <favorite-btn is-added="@(isInThisFavoriteList ? "true" : "false")" product-id="@productId" variant-id="@variantId" list-id="@list.ListId" offcanvas-url="@Pageview.SearchFriendlyUrl" context="offcanvas"> 122 <span class="btn-icon--addtofavorites"> 123 <span class="in-list" title="@Translate("Remove from favorites")" aria-hidden="@(isInThisFavoriteList ? "false" : "true")"> 124 @ReadFile(iconPath + "tingstad-addtofavorites-on.svg") 125 </span> 126 <span class="not-in-list" title="@Translate("Add to favorites")" aria-hidden="@(isInThisFavoriteList ? "true" : "false")"> 127 @ReadFile(iconPath + "tingstad-addtofavorites-off.svg") 128 </span> 129 </span> 130 </favorite-btn> 131 @* 132 @if (isInThisFavoriteList) 133 { 134 <div class="icon-2 favorite-icon"> 135 <span class="in-list">@ReadFile(iconPath + "tingstad-addtofavorites-on.svg")</span> 136 <span class="not-in-list d-none">@ReadFile(iconPath + "tingstad-addtofavorites-off.svg")</span> 137 </div> 138 } 139 else 140 { 141 <div class="icon-2 favorite-icon"> 142 <span class="in-list d-none">@ReadFile(iconPath + "tingstad-addtofavorites-on.svg")</span> 143 <span class="not-in-list">@ReadFile(iconPath + "tingstad-addtofavorites-off.svg")</span> 144 </div> 145 }*@ 146 </button> 147 </li> 148 } 149 </ul> 150 </div> 151 152 @if (favoriteListsLink > 0) 153 { 154 <a href="/Default.aspx?ID=@favoriteListsLink" class="btn btn-primary w-100" data-dw-button="primary" id="CreateNewFavoriteList"><span class="me-2">@ReadFile(iconPath + "clipboard.svg") </span> @Translate("Create a new favorite list")</a> 155 } 156 </form> 157 </div> 158 } 159