Error executing template "Designs/CorsonMaize/eCom/Product/Details.cshtml" System.IO.FileNotFoundException: Could not find file 'C:\home\site\wwwroot\Files\Templates\Designs\CorsonMaize\assets\svg\cobcontact.svg'. File name: 'C:\home\site\wwwroot\Files\Templates\Designs\CorsonMaize\assets\svg\cobcontact.svg' at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) at System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost) at CompiledRazorTemplates.Dynamic.RazorEngine_466105ad05524f099e485cf9e9513110.Execute() in C:\home\site\wwwroot\Files\Templates\Designs\CorsonMaize\eCom\Product\Details.cshtml:line 560 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 @using Dynamicweb.Core 3 @using Dynamicweb.Ecommerce.Products 4 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5 @using Dynamicweb.Core 6 7 @helper RenderTitle(string title, string subtitle) 8 { 9 <div class="product-title" style="align-items: baseline;"> 10 <h1>@title</h1> 11 <h2 class="product-subtitle">@subtitle</h2> 12 </div> 13 } 14 15 @helper RenderSilageAndGrain(string silageCrm, string grainCrm) 16 { 17 <div class="product-header-details"> 18 <div class="crm">CRM</div> 19 <div class="grain-silage"> 20 @if (silageCrm.IsNotNullOrEmpty()) 21 { 22 <div>Silage: @silageCrm</div> 23 } 24 @if (grainCrm.IsNotNullOrEmpty()) 25 { 26 <div>Grain: @grainCrm</div> 27 } 28 </div> 29 </div> 30 } 31 32 @helper RenderProductImageAndLogo(string productImage, string productIcon) 33 { 34 <div class="product-image-and-logo-wrapper"> 35 @if (productImage.IsNotNullOrEmpty()) 36 { 37 <img src="@productImage" width="100%" /> 38 } 39 40 @if (productIcon.IsNotNullOrEmpty()) 41 { 42 <img src="@productIcon" style="position: absolute; right: 0px; bottom: 0px" /> 43 } 44 </div> 45 } 46 47 @helper RenderGetInTouch() { 48 <div class="flex title-links" style="width: 100%; justify-content: center;"> 49 <a href="/our-reps" class="helpful-link">GET IN TOUCH <div class="border-b-50"></div></a> 50 <a href="/where-to-buy" class="helpful-link">WHERE TO BUY <div class="border-b-50"></div></a> 51 </div> 52 } 53 54 @helper RenderVideo(bool hasVideo, string videoPlayLink, string videoImageLink) 55 { 56 <div> 57 @if (hasVideo) 58 { 59 <iframe width="100%" height="420" src="@videoPlayLink" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> 60 } 61 else 62 { 63 <img src="@videoImageLink" height="420" /> 64 } 65 </div> 66 } 67 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 68 69 @functions 70 { 71 private object Ratings(string property, LoopItem product) 72 { 73 if (product == null) 74 { 75 return @RenderRatings(property); 76 } 77 return @RenderRatings(property, product); 78 } 79 } 80 81 @helper RenderRatings(string fieldName) 82 { 83 var fieldValue = GetString(fieldName); 84 int ratings; 85 86 if (fieldValue == "NA" || fieldValue == "ID") 87 { 88 @fieldValue 89 } 90 else if (int.TryParse(fieldValue, out ratings)) 91 { 92 for (var i = 0; i < ratings; i++) 93 { 94 <i class="fa fa-star" aria-hidden="true"></i> 95 } 96 } 97 } 98 99 @helper RenderRatings(string fieldName, LoopItem product) 100 { 101 var fieldValue = product.GetString(fieldName); 102 int ratings; 103 104 if (fieldValue == "NA" || fieldValue == "ID") 105 { 106 @fieldValue 107 } 108 else if (int.TryParse(fieldValue, out ratings)) 109 { 110 for (var i = 0; i < ratings; i++) 111 { 112 <i class="fa fa-star" aria-hidden="true"></i> 113 } 114 } 115 } 116 117 @helper RenderHybridTraits(string colour, LoopItem product = null) 118 { 119 <h3 class="hybrid-traits-title">Hybrid Traits</h3> 120 121 <table class="table traits table-stars"> 122 <tbody> 123 <tr> 124 <td> 125 Early Growth 126 </td> 127 <td style="color: @colour;"> 128 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Early_Growth.Value", product) 129 130 </td> 131 </tr> 132 <tr> 133 <td> 134 Drought Tolerance 135 </td> 136 <td style="color: @colour;"> 137 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Drought_Tolerance.Value", product) 138 139 </td> 140 </tr> 141 <tr> 142 <td> 143 Staygreen 144 </td> 145 <td style="color: @colour;"> 146 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Staygreen.Value", product) 147 148 </td> 149 </tr> 150 <tr> 151 <td> 152 Whole Plant Digestibility 153 </td> 154 <td style="color: @colour;"> 155 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Whole_Plant_Digestibility.Value", product) 156 157 </td> 158 </tr> 159 <tr> 160 <td> 161 Total Energy 162 </td> 163 <td style="color: @colour;"> 164 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Total_Energy.Value", product) 165 166 </td> 167 </tr> 168 <tr> 169 <td> 170 Stalk Strength 171 </td> 172 <td style="color: @colour;"> 173 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Stalk_Strength.Value", product) 174 175 </td> 176 </tr> 177 <tr> 178 <td> 179 Root Strength 180 </td> 181 <td style="color: @colour;"> 182 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Root_Strength.Value", product) 183 184 </td> 185 </tr> 186 <tr> 187 <td> 188 Rust Tolerance 189 </td> 190 <td style="color: @colour;"> 191 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Rust_Tolerance.Value", product) 192 193 </td> 194 </tr> 195 <tr> 196 <td> 197 Northern Leaf Blight 198 </td> 199 <td style="color: @colour;"> 200 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Northern_Leaf_Blight.Value", product) 201 202 </td> 203 </tr> 204 <tr> 205 <td> 206 Grain Drydown 207 </td> 208 <td style="color: @colour;"> 209 @Ratings("Ecom:Product.CategoryField.CorsonMaize_Common.Grain_Drydown.Value", product) 210 211 </td> 212 </tr> 213 </tbody> 214 </table> 215 } 216 217 @helper RenderProductListHybridTraits(string colour, LoopItem product = null) 218 { 219 220 var highlightTraitOne = product.GetString("Ecom:Product.CategoryField.CorsonMaize_Common.TraitHighlightOne.Value"); 221 var highlightTraitTwo = product.GetString("Ecom:Product.CategoryField.CorsonMaize_Common.TraitHighlightTwo.Value"); 222 var highlightTraitThree = product.GetString("Ecom:Product.CategoryField.CorsonMaize_Common.TraitHighlightThree.Value"); 223 var highlightTraitFour = product.GetString("Ecom:Product.CategoryField.CorsonMaize_Common.TraitHighlightFour.Value"); 224 225 string[] fieldNames = new string[] { 226 "Early Growth", 227 "Drought Tolerance", 228 "Staygreen", 229 "Whole Plant Digestibility", 230 "Total Energy", 231 "Stalk Strength", 232 "Root Strength", 233 "Rust Tolerance", 234 "Northern Leaf Blight", 235 "Grain Drydown" 236 }; 237 238 int[] traitValues = new int[fieldNames.Length]; 239 string[] traitValueStrings = new string[fieldNames.Length]; 240 241 for (int i = 0; i < fieldNames.Length; i++) 242 { 243 string fieldName = (fieldNames[i] ?? "").Replace(" ", "_"); 244 string fieldValueString = product.GetString($"Ecom:Product.CategoryField.CorsonMaize_Common.{fieldName}.Value"); 245 246 if (!int.TryParse(fieldValueString, out int fieldValue)) 247 { 248 fieldValue = 0; 249 } 250 251 traitValues[i] = fieldValue; 252 traitValueStrings[i] = fieldNames[i]; 253 } 254 255 var sortedTraitValues = traitValues 256 .Select((value, index) => new { Value = value, OriginalString = traitValueStrings[index] }) 257 .OrderByDescending(x => x.Value) 258 .ToList(); 259 260 var topTraitStringValues = sortedTraitValues.Select(x => x.OriginalString).ToList(); 261 262 var highlightTraits = new List<string> { 263 highlightTraitOne, 264 highlightTraitTwo, 265 highlightTraitThree, 266 highlightTraitFour 267 }; 268 269 270 var replacementValues = new List<string>(topTraitStringValues); 271 272 for (int i = 0; i < highlightTraits.Count; i++) 273 { 274 if (string.IsNullOrEmpty(highlightTraits[i])) 275 { 276 while (replacementValues.Count > 0) 277 { 278 string nextValue = replacementValues.First(); 279 replacementValues.RemoveAt(0); 280 if (!highlightTraits.Contains(nextValue)) 281 { 282 highlightTraits[i] = nextValue; 283 break; 284 } 285 } 286 } 287 } 288 289 var traitList = highlightTraits.Distinct().ToList(); 290 traitList = traitList.Take(4).ToList(); 291 292 <table class="table traits table-stars"> 293 <tbody> 294 <tr> 295 @foreach (var trait in traitList) 296 { 297 var highlightTraitValue = (trait ?? "").Replace(" ", "_"); 298 <td class="table-stars-heading"> 299 @trait 300 </td> 301 } 302 </tr> 303 <tr> 304 @foreach (var trait in traitList) 305 { 306 var highlightTraitValue = (trait ?? "").Replace(" ", "_"); 307 <td> 308 <span style="color: @colour;"> 309 @Ratings($"Ecom:Product.CategoryField.CorsonMaize_Common.{highlightTraitValue}.Value", product) 310 </span> 311 </td> 312 } 313 </tr> 314 </tbody> 315 </table> 316 } 317 318 319 @{ 320 var groupService = new GroupService(); 321 string groupId = GetString("Ecom:Product.PrimaryOrFirstGroupID"); 322 Group group = groupService.GetGroup(groupId); 323 string colour = group.ProductGroupFieldValues.GetProductGroupFieldValue("GroupTextColour").Value.ToString(); 324 var regionOneHarvestDate = GetString("Harvest_Date_Region_One.Clean"); 325 var regionTwoHarvestDate = GetString("Harvest_Date_Region_Two.Clean"); 326 var regionThreeHarvestDate = GetString("Harvest_Date_Region_Three.Clean"); 327 var regionFourHarvestDate = GetString("Harvest_Date_Region_Four.Clean"); 328 var silageHa = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Silage_HA.Value"); 329 var grainHa = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Grain_HA.Value"); 330 var backgroundUrl = GetString("Ecom:Product:Field.ProductBannerImageDesktop.Clean"); 331 var productImage = GetString("Ecom:Product:Field.ProductImage.Clean"); 332 var productIcon = GetString("Ecom:Product:Field.ProductIcon.Clean"); 333 var videoPlayLink = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Video_Play_Link.Value"); 334 var videoImageLink = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Video_Image_Link.Value"); 335 string groupVideo = group.ProductGroupFieldValues.GetProductGroupFieldValue("ProductGroupDesktopBanner").Value.ToString(); 336 var hasVideo = videoPlayLink.IsNotNullOrEmpty(); 337 var hasBackground = backgroundUrl.IsNotNullOrEmpty(); 338 var bgSource = hasBackground ? backgroundUrl : "/Files/Images/" + groupVideo; 339 var mapImageSource = "/Admin/Public/map1.svg"; 340 var silageCrm = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Silage_CRM.Value"); 341 var grainCrm = GetString("Ecom:Product.CategoryField.CorsonMaize_Common.Grain_CRM.Value"); 342 var title = GetString("Ecom:Product:Field.Title.Value"); 343 var subtitle = GetString("Ecom:Product:Field.Subtitle.Value"); 344 string logoImageLink = GetString("Ecom:Product.ImageLogo.Clean"); 345 string logoImageAlt = title + " " + subtitle; 346 bool promote = GetBoolean("Ecom:Product.CategoryField.CorsonMaize_Common.PromoteAsNew.Value"); 347 348 if (regionTwoHarvestDate.IsNotNullOrEmpty()) 349 { 350 mapImageSource = "/Admin/Public/map2.svg"; 351 } 352 if (regionThreeHarvestDate.IsNotNullOrEmpty()) 353 { 354 mapImageSource = "/Admin/Public/map3.svg"; 355 } 356 if (regionFourHarvestDate.IsNotNullOrEmpty()) 357 { 358 mapImageSource = "/Admin/Public/map4.svg"; 359 } 360 361 if (colour.IsNullOrEmpty()) 362 363 { 364 colour = "rgb(27, 101, 66)"; 365 } 366 colour = "#65b42a"; 367 } 368 369 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 370 371 <div class="breadcrumbs-outer-wrap"> 372 <div class="container-fluid"> 373 @RenderNavigation(new 374 { 375 id = "breadcrumbs", 376 template = @".\breadcrumb.xslt", 377 expandmode = "All" 378 }) 379 </div> 380 </div> 381 382 <div class="product-detail"> 383 <!-- product head starts --> 384 <div class="title-section" style="background-image: url('@bgSource');"> 385 <div class="wrap-md-offset-1-leftright title-and-logo"> 386 <div style="position: relative; z-index: 0;"> 387 <img src="~/Admin/Public/Sheild.svg" class="sheild" /> 388 <div style=" background-color: white; padding: 0px 24px; padding-bottom: 24px;"> 389 <div class="flex justify-between items-center xs-hide" style="padding-top: 30px;"> 390 <div> 391 @RenderTitle(title, subtitle) 392 </div> 393 @RenderSilageAndGrain(silageCrm, grainCrm) 394 </div> 395 396 <div class="md-hide flex product-title-mobile"> 397 @RenderProductImageAndLogo(productImage, productIcon) 398 <div class="product-title-mobile-details"> 399 @RenderTitle(title, subtitle) 400 @RenderSilageAndGrain(silageCrm, grainCrm) 401 </div> 402 </div> 403 404 <div class="line xs-hide"></div> 405 406 <div class="row"> 407 <div class="col-md-3 col-xs-12 xs-hide" style="position: relative; top: 0px;"> 408 @if (productImage.IsNotNullOrEmpty()) 409 { 410 <img src="@productImage" width="100%" /> 411 } 412 413 @if (productIcon.IsNotNullOrEmpty()) 414 { 415 <img src="@productIcon" style="position: absolute; right: 0px; bottom: 0px" /> 416 } 417 </div> 418 <div class="col-md-6 col-xs-12 product-description"> 419 <div class="rte product-li info-list"> 420 @GetString("Ecom:Product.LongDescription") 421 </div> 422 423 <div class="xs-hide" style="width: 100%;"> 424 @RenderGetInTouch() 425 </div> 426 </div> 427 <div style="position: relative; top: 0px;" class="col-md-3 col-xs-12 harvest"> 428 <div class="map-wrapper"> 429 <img src="@mapImageSource" class="map-image" /> 430 <div class="traits-container"> 431 @if (!string.IsNullOrWhiteSpace(regionOneHarvestDate)) 432 { 433 <div class="trait-dotted"> 434 <div class="trait-dotted--title">Region 1</div> 435 <span class="trait-dotted--date"> 436 @regionOneHarvestDate 437 </span> 438 </div> 439 } 440 441 @if (!string.IsNullOrWhiteSpace(regionTwoHarvestDate)) 442 { 443 <div class="trait-dotted"> 444 <div class="trait-dotted--title">Region 2</div> 445 <span class="trait-dotted--date"> 446 @regionTwoHarvestDate 447 </span> 448 </div> 449 } 450 451 @if (!string.IsNullOrWhiteSpace(regionThreeHarvestDate)) 452 { 453 <div class="trait-dotted"> 454 <div class="trait-dotted--title">Region 3</div> 455 <span class="trait-dotted--date"> 456 @regionThreeHarvestDate 457 </span> 458 </div> 459 } 460 461 @if (!string.IsNullOrWhiteSpace(regionFourHarvestDate)) 462 { 463 <div class="trait-dotted"> 464 <div class="trait-dotted--title">Region 4</div> 465 <span class="trait-dotted--date"> 466 @regionFourHarvestDate 467 </span> 468 </div> 469 } 470 </div> 471 </div> 472 </div> 473 </div> 474 </div> 475 </div> 476 </div> 477 </div> 478 479 <div style="background-color: rgb(247, 247, 247)"> 480 <div class="md-hide" style="padding-top: 2em;"> 481 @RenderGetInTouch() 482 </div> 483 484 <div class="product-traits container section-padding"> 485 <div class="row wrap-md-offset-1-leftright"> 486 <div class="col-md-7 col-xs-12"> 487 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 488 489 <!-- product info-wrap starts --> 490 @GetString("Ecom:Product:Field.ProductExtraDesciption.Value.Clean") 491 492 </div> 493 494 495 <div class="col-md-5 traits-table-wrap col-xs-12"> 496 @RenderHybridTraits(colour) 497 <h3 class="hybrid-traits-title">Planting Populations (000/HA)</h3> 498 499 <table class="table traits"> 500 <tbody> 501 @if (!grainHa.IsNullOrEmpty()) 502 { 503 <tr> 504 <td> 505 Grain 506 </td> 507 <td style="color: @colour;"> 508 509 <div>@grainHa</div> 510 511 </td> 512 </tr> 513 } 514 @if (!silageHa.IsNullOrEmpty()) 515 { 516 <tr> 517 <td> 518 Silage 519 </td> 520 <td style="color: @colour;"> 521 522 <div>@silageHa</div> 523 524 </td> 525 </tr> 526 } 527 </tbody> 528 </table> 529 530 <button class="btn-trait-key" id="btn-trait-key" onclick="event.preventDefault()"> 531 Trait Key 532 </button> 533 534 <div id="trait-section" hidden> 535 <h1 style="font-size: 1.5em; font-weight: bold;">Key:</h1> 536 <div class="key-legend"> 537 <div class="rating"><i class="fa fa-star" aria-hidden="true"></i> <span>Poor</span></div> 538 <div class="rating"><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i> <span>Below Average</span></div> 539 <div class="rating"><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i> <span>Good</span></div> 540 <div class="rating"><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i> <span>Very Good</span></div> 541 <div class="rating"><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i><i class="fa fa-star" aria-hidden="true"></i> <span>Excellent</span></div> 542 <div class="rating"><i class="key">NA</i> <span>Not Applicable</span></div> 543 <div class="rating"><i class="key">ID</i> <span>Insufficient Data</span></div> 544 </div> 545 546 <span class="trait-warning">All ratings are not comparable to any other companies' ratings and are based on observations by Corson Maize staff.</span> 547 </div> 548 </div> 549 </div> 550 551 552 553 </div> 554 </div> 555 556 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 557 @using PgwSeeds.CorsonMaize 558 559 @{ 560 var iconSource = System.IO.File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath(KnownImageFiles.CobIcon)); 561 } 562 563 564 <div class="contact-us-wrapper"> 565 <div class="body"> 566 <h1>Get in touch with our specialists</h1> 567 <a href="https://www.corsonmaize.co.nz/our-reps" class="inline-block"> 568 <span>Contact Us</span> <span class="icon fa fa-arrow-right"></span> 569 </a> 570 </div> 571 572 <div class="cob"> 573 @iconSource 574 </div> 575 </div> 576 577 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 578 579 @{ 580 string productId = GetString("Ecom:Product.ID"); 581 var filterValue = "Product = \"p_" + productId + "\" or Product contains \"p_" + productId + ":\" or Product contains \"p_" + productId + ",\""; 582 } 583 584 585 @if (!string.IsNullOrWhiteSpace(productId)) 586 { 587 @RenderItemList(new 588 { 589 ItemType = "CorsonMaize_Product_Highlight_Paragraph", 590 ListSourceType = "NamedList", 591 TargetNamedList = "Highlight Box", 592 NamedListPageID = GetPageIdByNavigationTag(PgwSeeds.CorsonMaize.NavigationTags.Products), 593 Filter = filterValue, 594 ListTemplate = "ItemPublisher/List/HighlightBox_List.cshtml", 595 ListPageSize = "1" 596 }) 597 } 598 599 <div class="bg-white"> 600 <div class="container section-padding"> 601 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 602 603 604 @helper RenderCallToAction(string groupOrProductId) 605 { 606 if (!string.IsNullOrWhiteSpace(groupOrProductId)) 607 { 608 var productOrGroupFilterValue = "ProductOrGroup = \"" + groupOrProductId + "\" or ProductOrGroup contains \"" + groupOrProductId + ":\" or ProductOrGroup contains \"" + groupOrProductId + ",\" or ProductOrGroup ends with \"" + groupOrProductId + "\""; 609 610 @RenderItemList(new 611 { 612 ItemType = "CorsonMaize_Product_CTA", 613 ListSourceType = "NamedList", 614 TargetNamedList = "CTAS", 615 NamedListPageID = GetPageIdByNavigationTag(PgwSeeds.CorsonMaize.NavigationTags.Products), 616 Filter = productOrGroupFilterValue, 617 ListTemplate = "ItemPublisher/List/CTA_List.cshtml", 618 ListPageSize = "10" 619 }) 620 } 621 } 622 @RenderCallToAction($"p_{GetString("Ecom:Product.ID")}") 623 </div> 624 </div> 625 </div> 626 627 <script> 628 let element = document.getElementById("btn-trait-key"); 629 element.addEventListener("click", function (e) { 630 element.hidden = true; 631 document.getElementById("trait-section").hidden = false; 632 }); 633 </script>