Error executing template "Designs/OttoSchachner/Partials/ProductList.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_68170a9b73b1445f92544e72d3f1dee0.<ExecuteAsync>g__RenderItem|0_0(Object dynamicProduct, <>c__DisplayClass0_0&)
at CompiledRazorTemplates.Dynamic.RazorEngine_68170a9b73b1445f92544e72d3f1dee0.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
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.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, 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 @using Dynamicweb.Content
2 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites
3 @using Dynamicweb.Ecommerce.Products
4 @using Dynamicweb.Frontend
5 @{
6 bool slider = Dynamicweb.Core.Converter.ToBoolean(Model.Template.ViewParameters["slider"]);
7 int itemsToShow = Dynamicweb.Core.Converter.ToInt32(Model.Template.ViewParameters["itemsToShow"]);
8 int cols = 12 / itemsToShow;
9 bool favoriteListDetails = false;
10 var pageService = new PageService();
11 bool signedIn = PageView.Current().User != null;
12 var user = PageView.Current().User;
13
14
15 int shopPageId = Dynamicweb.Content.Services.Pages.GetPageByNavigationTag(PageView.GetAreaByDomain().ID, "Shop").ID;
16
17 string colsClass = "col-12 col-md-6 col-lg-" + cols;
18 dynamic products = new List<dynamic>();
19 var productService = new Dynamicweb.Ecommerce.Products.ProductService();
20
21 if (Model.Template.ViewParameters.ContainsKey("products"))
22 {
23 products = Model.Template.ViewParameters["products"];
24 }
25
26
27 if (products.Count == 0)
28 {
29 return;
30 }
31
32
33 //my account - favorite list details
34 if (Model.Template.ViewParameters.ContainsKey("favoriteListDetails"))
35 {
36 favoriteListDetails = Dynamicweb.Core.Converter.ToBoolean(Model.Template.ViewParameters["favoriteListDetails"]);
37 }
38
39
40
41
42 //make funktion that renders html
43 string RenderItem(dynamic dynamicProduct)
44 {
45 Dynamicweb.Ecommerce.Products.Product product = productService.GetProductById(dynamicProduct.Id, dynamicProduct.VariantId, dynamicProduct.LanguageId);
46 double fromPrice = product.DefaultPrice;
47 if (product.GetVariantCombinations() != null)
48 {
49 int counterVariants = 0;
50 foreach (var variant in product.GetVariantCombinations())
51 {
52 Dynamicweb.Ecommerce.Products.Product productVariant = productService.GetProductById(dynamicProduct.Id, variant.VariantId, dynamicProduct.LanguageId);
53 if (productVariant != null)
54 {
55 if ((counterVariants == 0 || productVariant.DefaultPrice < fromPrice) && productVariant.DefaultPrice > 0)
56 {
57 counterVariants++;
58 fromPrice = productVariant.DefaultPrice;
59 }
60 }
61
62 }
63 }
64
65 string type = dynamicProduct.GetType().ToString();
66 bool isProductViewModel = type == "Dynamicweb.Ecommerce.ProductCatalog.ProductViewModel";
67
68
69 string imageUrl = new ProductImageService().GetImagePath(product);
70 string imageSrc = "";
71
72
73 @if (!string.IsNullOrEmpty(imageUrl))
74 {
75 Dynamicweb.VestjyskMarketing.Models.ResizeImageSettings imageSettings = new Dynamicweb.VestjyskMarketing.Models.ResizeImageSettings
76 {
77 Width = 1920,
78 Height = 1920,
79 Crop = "5",
80 Quality = 90,
81 AlternativeImage = "/Files/Images/missing_image.jpg",
82 Image = imageUrl
83 };
84 imageSrc = Dynamicweb.VestjyskMarketing.Helpers.ImageHelper.ResizeImage(imageSettings);
85 }
86 else
87 {
88 imageSrc = "/Files/Images/missing_image.jpg";
89 }
90
91 string productUrl = "/Default.aspx?ID=" + shopPageId + "&groupid=" + product.GetDefaultGroup().Id + "&productid=" + product.Id;
92
93 <div class="position-relative h-100">
94
95
96 @if (favoriteListDetails)
97 {
98 string deleteLink = "/Default.aspx?ID=" + PageView.Current().ID + $"&ProductID={product.Id}&ProductVariantId={product.VariantId}&FavoriteListId={Dynamicweb.Context.Current.Request.QueryString["ListID"]}&FavoriteCmd=removeproductfromfavoritelist";
99
100 <a class="product-list__delete" href="@deleteLink" title="Fjern fra liste">
101 <span class="far fa-trash-alt"></span>
102 </a>
103 }
104
105 @if (isProductViewModel && signedIn)
106 {
107 string favoriteLink = "/Default.aspx?ID=" + pageService.GetPageByNavigationTag(PageView.Current().AreaID, "FavoriteService").ID + "&ProductID=" + product.Id + "&ProductVariantId=" + dynamicProduct.VariantId + "&UserID=" + PageView.Current().User.ID + "&ReloadPage=false";
108 bool isInFavoriteList = false;
109 var favoriteLists = user.GetFavoriteLists();
110 int favoriteListContainingProductId = 0;
111 string command = "add";
112
113 foreach (var favoriteList in favoriteLists)
114 {
115 isInFavoriteList = user.IsProductInFavoriteList(favoriteList.ListId, product.Id, "");
116
117 if (isInFavoriteList)
118 {
119 favoriteListContainingProductId = favoriteList.ListId;
120 command = "remove";
121
122 break;
123 }
124 }
125
126 <a data-command="@command" data-in-this-list="@favoriteListContainingProductId" data-url="@favoriteLink" href="javascript:void(0)" title="Tilføj eller fjern fra favoritter" class="product-list__favorite">
127 @if (isInFavoriteList)
128 {
129 <i class="fa-sharp fa-solid fa-heart"></i>
130 }
131 else
132 {
133 <i class="fa-regular fa-heart"></i>
134 }
135 </a>
136 }
137
138
139 <a title="Gå til produkt" href="@productUrl" class="product-list__product d-flex flex-column ">
140
141
142 <img loading="lazy" class="product-list__product__image" src="@imageSrc" alt="produkt beskrivelse" />
143
144 <div class="d-flex flex-column mt-3 flex-grow-1 justify-content-between">
145 <div class="product-list__product__name">
146 @product.Name
147 </div>
148
149 @{
150 bool signenIn = PageView.Current().User != null;
151 }
152
153 <div class="product-list__product__price-container d-flex flex-row align-items-center justify-content-between">
154 @if (signenIn)
155 {
156 @if (isProductViewModel)
157 {
158 <div class="product-list__product__price-container__price">
159 Fra @fromPrice.ToString("F2") KR
160 </div>
161 }
162 }
163 else
164 {
165 <div class="product-list__product__price-container__signin">
166 Login for pris
167 </div>
168 }
169
170 @{
171 string hiddenClass = "";
172
173 if (favoriteListDetails)
174 {
175 hiddenClass = "invisible";
176 }
177 }
178
179 <i class="@hiddenClass fa-solid fa-cart-shopping product-list__product__price-container__cart"></i>
180 </div>
181 </div>
182 </a>
183 </div>
184
185
186 return "";
187 }
188 }
189
190 @if (slider)
191 {
192 <div class="position-relative">
193
194 <div data-slidesperview="@itemsToShow" class="product-list__gallery overflow-hidden">
195 <div class="swiper-wrapper col-12">
196
197
198 @foreach (var product in products)
199 {
200 <div class="swiper-slide">
201 @RenderItem(product)
202 </div>
203 }
204
205
206 </div>
207
208 <div class="product-list__gallery__navigation position-absolute top-50 translate-middle-y z-1 justify-content-between d-flex w-100">
209 <i class="os-chevron os-chevron--prev bi-chevron-left productlist-prev"></i>
210 <i class="os-chevron bi-chevron-right productlist-next"></i>
211 </div>
212
213 </div>
214 </div>
215 }
216 else
217 {
218 foreach (var product in products)
219 {
220 <div class="@colsClass">
221 @RenderItem(product)
222 </div>
223 }
224 }