Error executing template "Designs/Soroto/eCom/Product/Product.cshtml"
System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest, Boolean renegotiation)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.ConnectStream.WriteHeaders(Boolean async)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state)
at System.Xml.XmlTextReaderImpl.OpenUrl()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
at System.Xml.XmlDocument.Load(XmlReader reader)
at System.Xml.XmlDocument.Load(String filename)
at CompiledRazorTemplates.Dynamic.RazorEngine_0791cb686d5048f0b392cd0777e7fe2e.Execute() in E:\dynamicweb.net\Solutions\FlexMedia\soroto2020.dw9.dynamicweb-cms.com\files\Templates\Designs\Soroto\eCom\Product\Product.cshtml:line 35
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 Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2
3 @using System.Web
4 @using System.Xml
5 @using System.Collections.Generic
6
7
8 @functions {
9 public class BlogModel
10 {
11 public string newsid { get; set; }
12 public string heading { get; set; }
13 public string image { get; set; }
14 public string description { get; set; }
15 public string linkurl { get; set; }
16 public string readmore { get; set; }
17 }
18 }
19 @{
20
21 string blogidlist = GetString("Ecom:Product:Field.BlogLinks").Replace(" ", String.Empty);
22
23 int pageID = GetPageIdByNavigationTag("FeedBlog");
24
25
26
27 string xmlurl = "https://www.soroto.dk/Default.aspx?ID=" + pageID + "&BlogList=" + blogidlist;
28
29 //string xmlurl = "https://www.soroto.dk/page-for-paragraphs/feed-blog?BlogList=" + blogidlist;
30
31 List<BlogModel> BlogItem = new List<BlogModel>();
32
33 //Load the XML file in XmlDocument.
34 XmlDocument xmldoc = new XmlDocument();
35 xmldoc.Load(xmlurl);
36
37 foreach (XmlNode node in xmldoc.SelectNodes("/list/item"))
38 {
39 //Fetch the Node values and assign it to Model.
40 BlogItem.Add(new BlogModel
41 {
42
43 newsid = node["newsid"].InnerText,
44 heading = node["heading"].InnerText,
45 image = node["image"].InnerText,
46 description = node["description"].InnerText,
47 linkurl = node["linkurl"].InnerText,
48 readmore = node["readmore"].InnerText
49
50 });
51 }
52
53 // @foreach (var item in BlogItem){}
54
55 }
56 @{
57 string ImgAltText = GetString("Ecom:Product.Name");
58 string ImgAltTextCustom = GetString("Ecom:Product:Field.ImgAltText");
59 if (!string.IsNullOrWhiteSpace(ImgAltTextCustom)){ImgAltText = ImgAltTextCustom;}
60 }
61
62 <link rel="stylesheet" type="text/css" href="/files/Templates/Designs/Soroto/slick/slick.css"/>
63 <link rel="stylesheet" type="text/css" href="/files/Templates/Designs/Soroto/slick/slick-theme.css"/>
64 <link rel="stylesheet" type="text/css" href="/files/Templates/Designs/Soroto/lightbox/css/lightbox.min.css"/>
65
66 <div class="container">
67 <div class="row">
68
69 <div class="single-product">
70 <div class="col-12 col-sm-6 product-images">
71 @{int DetailsCnt = 0;}
72 <div class="main-image">
73 <div>
74 <a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@GetValue("Ecom:Product.ImageDefault.Clean")&Format=png&Width=1200&Compression=61&Crop=5"><img src="/admin/public/getimage.ashx?Image=@GetValue("Ecom:Product.ImageDefault.Clean")&Format=png&Height=580&Width=580&Compression=61&Crop=5" alt="@ImgAltText" data-zoom-image="@GetValue("Ecom:Product.ImageDefault.Clean")"></a>
75
76 </div>
77
78 @foreach (var altImg in GetLoop("Ecom:Product.AlternativeImages")){
79 if(!string.IsNullOrWhiteSpace(altImg.GetString("Ecom:Product.AlternativeImages.Image"))){
80 DetailsCnt++;
81 <div><a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@altImg.GetString("Ecom:Product.AlternativeImages.Image")&Format=png&Width=1200&Compression=61&Crop=5">
82 <img data-zoom-image="/admin/public/getimage.ashx?Image=@altImg.GetString("Ecom:Product.AlternativeImages.Image")&Format=png&Width=1200&Compression=61&Crop=5" src="/admin/public/getimage.ashx?Image=@altImg.GetString("Ecom:Product.AlternativeImages.Image")&Format=png&Height=580&Width=580&Compression=61&Crop=5" alt="@ImgAltText - @DetailsCnt"></a>
83 </div>
84 }
85 }
86
87 @foreach (var item in GetLoop("Details")) {
88 DetailsCnt++;
89 <div><a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@item.GetValue("Ecom:Product:Detail.Image.Clean")&Format=png&Width=1200&Compression=61&Crop=5">
90 <img data-zoom-image="/admin/public/getimage.ashx?Image=@item.GetValue("Ecom:Product:Detail.Image.Clean")&Format=png&Width=1200&Compression=61&Crop=5" src="/admin/public/getimage.ashx?Image=@item.GetValue("Ecom:Product:Detail.Image.Clean")&Format=png&Height=580&Width=580&Compression=61&Crop=5" alt="@ImgAltText - @DetailsCnt"></a>
91 </div>
92
93 }
94
95 </div>
96
97 @{DetailsCnt = 0;}
98
99 <div class="small-images-container">
100
101 <button class="slick-next slick-arrow" aria-label="Next" type="button" style="" aria-disabled="true">Next</button>
102 <button class="slick-prev slick-arrow" aria-label="Previous" type="button" aria-disabled="true" style="">Previous</button>
103 <div class="small-images">
104
105
106
107 <div>
108 <a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@GetValue("Ecom:Product.ImageDefault.Clean")&Format=png&Width=1200&Compression=61&Crop=5"><img src="/admin/public/getimage.ashx?Image=@GetValue("Ecom:Product.ImageDefault.Clean")&Format=png&Height=70&Width=70&Compression=61&Crop=5" alt="@ImgAltText"></a>
109
110 </div>
111
112 @foreach (var altImg in GetLoop("Ecom:Product.AlternativeImages")){
113 if(!string.IsNullOrWhiteSpace(altImg.GetString("Ecom:Product.AlternativeImages.Image"))){
114 DetailsCnt++;
115 <div><a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@altImg.GetString("Ecom:Product.AlternativeImages.Image")&Format=png&Width=1200&Compression=61&Crop=5">
116 <img src="/admin/public/getimage.ashx?Image=@altImg.GetString("Ecom:Product.AlternativeImages.Image")&Format=png&Height=70&Width=70&Compression=61&Crop=5" alt="@ImgAltText - @DetailsCnt"></a>
117 </div>
118 }
119 }
120
121 @foreach (var item in GetLoop("Details")) {
122 DetailsCnt++;
123 <div><a data-lightbox="single-product" href="/admin/public/getimage.ashx?Image=@item.GetValue("Ecom:Product:Detail.Image.Clean")&Format=png&Width=1200&Compression=61&Crop=5">
124 <img src="/admin/public/getimage.ashx?Image=@item.GetValue("Ecom:Product:Detail.Image.Clean")&Format=png&Height=70&Width=70&Compression=61&Crop=5" alt="@ImgAltText - @DetailsCnt"></a>
125 </div>
126
127 }
128 </div>
129 </div>
130 <div class="product-info">
131 <div>@Translate("Product_nr", "VARENUMMER:") @GetValue("Ecom:Product.Number")</div>
132 @*
133 @if (!string.IsNullOrWhiteSpace(@GetString("Ecom:Product:Field.dbnr"))) {
134 <div>DB NR. (TUN): @GetValue("Ecom:Product:Field.dbnr")</div>
135 }
136 *@
137 </div>
138
139
140
141 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Faq1Link"))) {
142 <a href="@GetString("Ecom:Product:Field.Faq1Link")">
143 <div class="ask-product">
144 <div><p>@GetValue("Ecom:Product:Field.Faq1Text")</p></div>
145 <div class="image"><img src="/Files/Images/ask.png" alt="ask us"></div>
146 </div>
147 </a>
148 }
149 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Faq2Link"))) {
150 <a href="@GetString("Ecom:Product:Field.Faq2Link")">
151 <div class="ask-product">
152 <div><p>@GetValue("Ecom:Product:Field.Faq2Text")</p></div>
153 <div class="image"><img src="/Files/Images/ask.png" alt="ask us"></div>
154 </div>
155 </a>
156 }
157
158
159 </div>
160 <div class="col-12 col-sm-6 product-content">
161 <div><h1>@GetValue("Ecom:Product.Name")</h1></div>
162 <div>@GetValue("Ecom:Product.LongDescription")</div>
163
164
165 </div>
166
167 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.ExtraDescription.Value.Clean"))) {
168 <div class="col-12">
169 @GetString("Ecom:Product:Field.ExtraDescription.Value.Clean")
170 </div>
171 }
172
173 <div class="col-12">
174
175
176 <ul class="nav nav-tabs">
177 @if((@GetString("Ecom:Product:Field.VideoValg.Value")=="DetaljerLinks" && !string.IsNullOrWhiteSpace(@GetString("Ecom:Product:Field.Youtube"))) || (@GetString("Ecom:Product:Field.VideoValg.Value")!="DetaljerLinks" && !string.IsNullOrWhiteSpace(@GetString("Ecom:Product:Field.Videofane")))){
178 <li class="active"><a data-toggle="tab" href="#Video">@Translate("Product_Video", "Video")</a></li>
179 }
180 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Beskrivelesfane.Value.Clean"))) {
181 <li><a data-toggle="tab" href="#Beskrivelse">@Translate("Product_Beskrivelse", "Beskrivelse")</a></li>
182 }
183
184 @if(GetString("Ecom:Product:Field.SpecifikationerValg")!="Text" || !string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Specifikationerfane.Value.Clean"))){
185 <li><a data-toggle="tab" href="#Specifikationer">@Translate("Product_Specifikationer", "Specifikationer")</a></li>
186 }
187
188 @if(!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.BlogLinks"))){
189 <li><a data-toggle="tab" href="#Blog">@Translate("Product_Blog", "Blog")</a></li>
190 }
191
192
193
194 </ul>
195
196
197
198
199 <div class="tab-content">
200 <div id="Beskrivelse" class="tab-pane">
201 @GetString("Ecom:Product:Field.Beskrivelesfane.Value.Clean")
202 </div>
203
204
205 @if(GetString("Ecom:Product:Field.SpecifikationerValg")!="Text" || !string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Specifikationerfane.Value.Clean"))){
206 <div id="Specifikationer" class='tab-pane fade @GetValue("Ecom:Product:Field.HighlightColumn.Value.Clean")'>
207
208 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Specifikationerfane.Value.Clean"))) {
209 @GetString("Ecom:Product:Field.Specifikationerfane.Value.Clean")
210 }else{
211
212
213
214
215 <table class="l120" style="width:auto" cellspacing="1" cellpadding="1" border="1">
216 @foreach (var i in GetLoop("ProductCategories")) {
217
218 <thead>
219 <tr>
220 <th scope="row">@Translate(i.GetString("Ecom:Product.Category.Name"))</th>
221 <th style="text-align:center;">@Translate(GetString("Ecom:Product:Field.ProduktKategoriTitle"))</th>
222
223 </tr>
224 </thead>
225
226 <tfoot>
227 <tr>
228 <th scope="row"></th>
229 <th></th>
230 </tr>
231 </tfoot>
232
233 <tbody>
234 @foreach (var item in i.GetLoop("ProductCategoryFields")) {
235 <tr>
236 <th scope="row">@item.GetString("Ecom:Product.CategoryField.Label")</th>
237 <td>@item.GetString("Ecom:Product.CategoryField.Value")</td>
238 </tr>
239 }
240 </tbody>
241 }
242 </table>
243
244
245
246 @*
247
248 foreach (var g in GetLoop("ProductGroups")) {
249
250 if(GetString("Ecom:Product.PrimaryOrFirstGroupID") == g.GetString("Ecom:Group.ID")){
251
252
253
254 }
255
256 }
257 *@
258
259 <!--
260 <table class="l120" style="width:100%" cellspacing="1" cellpadding="1" border="1">
261 <thead>
262 <tr>
263 <th scope="row">TVANGSBLANDER</th>
264 <th scope="col">40L</th>
265 <th scope="col">80L</th>
266 <th scope="col">100L</th>
267 <th scope="col">120L</th>
268 </tr>
269 </thead>
270 <tbody>
271 <tr>
272 <th scope="row">Motor</th>
273 <td>230v / 0,75 kW</td>
274 <td>230v / 1,1 kW</td>
275 <td>230v / 1,1 kW</td>
276 <td>230v / 1,1 kW</td>
277 </tr>
278 <tr>
279 <th scope="row">Omdr./min.</th>
280 <td>30</td>
281 <td>30</td>
282 <td> </td>
283 <td> </td>
284 </tr>
285 <tr>
286 <th scope="row">Beholderkapacitet</th>
287 <td>41 ltr.</td>
288 <td>81 ltr.</td>
289 <td> </td>
290 <td> </td>
291 </tr>
292 <tr>
293 <th scope="row">Blandekapacitet</th>
294 <td>40 ltr.</td>
295 <td>80 ltr.</td>
296 <td> </td>
297 <td> </td>
298 </tr>
299 <tr>
300 <th scope="row">Højde</th>
301 <td>103-121 cm</td>
302 <td>109-127 cm</td>
303 <td> </td>
304 <td> </td>
305 </tr>
306 <tr>
307 <th scope="row">Bredde/længde</th>
308 <td>60 cm / 60 cm</td>
309 <td>60 cm / 75 cm</td>
310 <td> </td>
311 <td> </td>
312 </tr>
313 <tr>
314 <th scope="row">Vægt</th>
315 <td>64 kg</td>
316 <td>88 kg</td>
317 <td> </td>
318 <td> </td>
319 </tr>
320 </tbody>
321 </table>
322 -->
323
324
325 }
326
327
328
329 </div>
330 }
331
332 @if(@GetString("Ecom:Product:Field.VideoValg.Value")=="DetaljerLinks"){
333
334
335 if(!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Youtube"))){
336
337 string[] youtubeList = new string[]{};
338
339 if(!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.YoutubeList"))){
340 youtubeList = GetString("Ecom:Product:Field.YoutubeList").Replace(" ", String.Empty).Split(',');
341
342 } else if(!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.Youtube"))){
343 youtubeList = GetString("Ecom:Product:Field.Youtube").Replace(" ", String.Empty).Split(',');
344 }
345
346
347
348
349 <div id="Video" class="tab-pane active col-12 col-sm-6">
350
351 @foreach (String youtubeVideo in youtubeList){
352 <iframe width="560" height="315" src='https://www.youtube.com/embed/@youtubeVideo?rel=0&controls=0&showinfo=0' frameborder="0" allowfullscreen></iframe>
353 }
354
355 </div>
356
357 }
358 }else{
359 if(!string.IsNullOrWhiteSpace(@GetString("Ecom:Product:Field.Videofane"))){
360 <div id="Video" class="tab-pane active col-12 col-sm-6">
361 @GetString("Ecom:Product:Field.Videofane")
362 </div>
363 }
364 }
365
366
367
368
369
370
371
372
373
374
375
376
377 @if(!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.BlogLinks"))){
378
379 <div id="Blog" class="tab-pane" list="@blogidlist">
380 <div class="blog-tab">
381
382 @foreach (var item in BlogItem){
383 <div class="col-12 col-sm-6 col-md-3">
384 <a href="@item.linkurl" newsid="@item.newsid">
385 <div class="image-cont" style="background-image:url("/admin/public/getimage.ashx?Image=@(item.image)&Format=png&height=500&Compression=61&Crop=5")"></div>
386 </a>
387 <div class="content">
388 <a href="@item.linkurl">
389 <div class="title">@item.heading</div>
390 </a>
391 <div class="content">
392 <div class="newstext">@item.description</div>
393 </div>
394 <div class="more"><a href="@item.linkurl">@item.readmore</a></div>
395 </div>
396 </div>
397 }
398 </div>
399
400 </div>
401
402
403 }
404
405
406
407
408
409
410
411
412
413
414
415 </div>
416 </div>
417
418 </div>
419 </div>
420 </div>
421
422 <script type="text/javascript" src="/files/Templates/Designs/Soroto/lightbox/lightbox-plus-jquery.min.js"></script>
423 <script type="text/javascript" src="/files/Templates/Designs/Soroto/slick/slick.min.js"></script>
424
425 <script type="text/javascript">
426 jQuery('.main-image').slick({
427 slidesToShow: 1,
428 slidesToScroll: 1,
429 arrows: false,
430 swipe: false,
431 fade: true,
432 initialSlide: 0,
433 infinite: false,
434 lazyLoad: 'ondemand',
435 asNavFor: '.small-images'
436 });
437
438 jQuery('.small-images').slick({
439 slidesToShow: 6,
440 slidesToScroll:1,
441 focusOnSelect: true,
442 initialSlide: 0,
443 infinite: false,
444 asNavFor: '.main-image',
445 arrows: false,
446 dots: false,
447 draggable: false,
448 centerMode: false,
449 });
450
451
452
453 if ($('.small-images .slick-slide').length < 7){
454 $('.small-images').addClass("less-than-seven");
455 }
456
457
458 $('.slick-next').on('click', function(){
459
460 const current = parseInt($(".small-images").find('.slick-current').attr('data-slick-index'));
461
462
463 $(".small-images").slick('slickGoTo', current+1);
464
465
466 });
467
468
469 $('.slick-prev').on('click', function(){
470
471 const current = parseInt($(".small-images").find('.slick-current').attr('data-slick-index'));
472
473
474 $(".small-images").slick('slickGoTo', current-1);
475
476
477 });
478
479
480
481
482
483
484 </script>
485 <script type="text/javascript" src="https://www.soroto.dk/Files/Templates/Designs/Soroto/js/jquery.ez-plus.js"></script>
486 <script defer type="text/javascript">
487
488 $('.main-image').on('beforeChange', function(event, slick, currentSlide, nextSlide){
489 var img = $(slick.$slides[nextSlide]).find("img");
490 $('.zoomWindowContainer,.zoomContainer').remove();
491 $(img).ezPlus();
492 });
493
494
495
496 $('.main-image .slick-current img').ezPlus();
497
498
499
500
501
502
503 </script>
504
505 @SnippetStart("SingleProductTop")
506
507 @if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.TopImage.FullPath"))) {
508 <div id='block-block-@GetValue("ParagraphID")' class="top-image top-image-product" style='background-image:url(@GetValue("Ecom:Product:Field.TopImage.FullPath"))'></div>
509 }
510
511
512
513
514 @SnippetEnd("SingleProductTop")
515
516
517