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