Error executing template "/Designs/Swift/Paragraph/Mennt_DealerList.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_025947f439244893ad157330e67c55d6.Execute() in D:\dynamicweb.net\Solutions\Mennt\tysse.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Mennt_DealerList.cshtml:line 22
   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 @using Mennt.Tysse.Custom.Helpers 2 3 @{ 4 var productId = Dynamicweb.Context.Current.Request.QueryString.Get("ProductID"); 5 var productName = Dynamicweb.Context.Current.Request.QueryString.Get("ProductName"); 6 var productImage = Dynamicweb.Context.Current.Request.QueryString.Get("ProductImage"); 7 var addToCart = Dynamicweb.Context.Current.Request.QueryString.Get("AddToCart"); 8 var dealersByArea = DealerHelper.GetDealersByArea(productId); 9 10 string iconPath = "/Files/Icons/"; 11 int dealerStock = DealerHelper.GetDealerStock(productId); 12 Mennt.Tysse.Custom.Models.Dealer selectedDealer = DealerHelper.SelectedDealer(); 13 14 var test = Dynamicweb.Ecommerce.Products.Product.GetProductById(productId); 15 16 var groupID = test != null ? test.GetDefaultGroupByShopId("SHOP1") : null; 17 var parent = groupID != null ? groupID.PrimaryParentGroupId : ""; 18 19 var groups = ""; 20 var spareParts = "false"; 21 if(productId != "0") { 22 foreach (var x in test.Groups) 23 { 24 groups = x.Name; 25 } 26 27 if (groups.Contains("Reservedeler")) 28 { 29 spareParts = "true"; 30 } 31 } 32 33 var i = 0; 34 } 35 36 <div class="d-flex justify-content-end p-3"> 37 <div class="d-flex align-items-center"> 38 <span class="pe-2" style="margin-left: auto;">@Translate("Lukk")</span> 39 <div class="close-dealer-modal"> 40 <span class="my-auto" data-bs-dismiss="modal" aria-label="Close" style="cursor: pointer;"> 41 @ReadFile(iconPath + "kryss.svg") 42 </span> 43 </div> 44 </div> 45 </div> 46 <h5 class="modal-title display-2 text-center py-3">@Translate("Velg forhandler")</h5> 47 48 @* Søkefelt *@ 49 <div class="d-flex align-items-center w-100"> 50 <div class="search-dealer w-100 p-3 w-100 mx-auto" style="max-width: 500px"> 51 <button id="searchTermDealerButton" type="button" onclick="searchDealers('@productId', '@productName', '@productImage')"> 52 <i class="fa fa-search findStock" id="searchIcon" style="color:black;"></i> 53 </button> 54 <input type="text" class="form-control regular-bread-text" name="searchTermDealer" id="searchTermDealer" placeholder="Søk nærmeste by eller poststed" value="" onkeypress="(event.key === 'Enter') ? searchDealers('@productId', '@productName', '@productImage') : undefined;"> 55 </div> 56 </div> 57 @* Location *@ 58 <div class="m-3 d-flex justify-content-center"> 59 <button onclick="searchByCurrentLocation('@productId', '@productName', '@productImage')" class="btn btn-primary w-100 p-2 d-flex align-items-center justify-content-center" style="max-width:250px;" id="getLocation"> 60 <span class="findStock"> Finn din nærmeste butikk </span> 61 <span class="ps-1 d-flex align-self-center"> @ReadFile(iconPath + "finnforhandlerHvit.svg")</span> 62 </button> 63 </div> 64 65 @if(productId != "0" && spareParts != "true"){ 66 <div id="onlyInStock" class="d-flex justify-content-center justify-content-md-end me-0 me-md-4"> 67 <label for="hideDealers" class="me-1">@Translate("Vis kun de på lager")</label> 68 <input type="checkbox" id="hideDealers" onclick="hideDealers()"> 69 </div> 70 } 71 else 72 { 73 <!-- QUICK FIX --> 74 <div id="onlyInStock" class="d-none"> 75 <label for="hideDealers">@Translate("Vis kun de på lager")</label> 76 <input type="checkbox" id="hideDealers" onclick="hideDealers()"> 77 </div> 78 } 79 80 <div class="modal-body p-3 p-lg-3 h-100"> 81 <span id="productMessage" class="d-block"></span> 82 <span id="productGroup" class="d-none">@spareParts</span> 83 <div> 84 <div class="text-start" id="searchResultDealer"></div> 85 </div> 86 87 <div class="accordion" id="accordionExample"> 88 @foreach (var area in dealersByArea) 89 { 90 <div class="mb-3 areaStock"> 91 <h2 class="accordion-header" id="headingOne_@i"> 92 <button class="accordion-button collapsed bg-light border-0 rounded-3 " type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne_@i" aria-expanded="true" aria-controls="collapseOne_@i"> 93 <div style="font-weight: 500!important;" data-area-name="@area.Name">@area.Name <span class="amountStock ms-2 regular-bold-text text-success"></span></div> 94 </button> 95 </h2> 96 97 @foreach (var dealer in area.Dealers) 98 { 99 100 var subSegment = @String.Join(",", dealer.SubSegments); 101 var boatDealer = subSegment.Equals("BÅT"); 102 103 <div id="collapseOne_@i" class="accordion-collapse collapse dealerElement" aria-labelledby="headingOne_@i" data-bs-parent="#accordionExample" data-dealerid="@dealer.Number"> 104 105 <input type="hidden" class="dealerId" value="@dealer.Id" /> 106 @if (!boatDealer) 107 { 108 <div class="py-3"> 109 <div class="border rounded p-3 @((selectedDealer != null && dealer.Name == selectedDealer.Name) ? "border-red" : "")"> 110 <div class="regular-bold-text text-start" style="font-weight: 600!important;">@dealer.Name</div> 111 <div class="regular-bread-text text-start">@dealer.Address, @dealer.Zip @dealer.City</div> 112 <div class="regular-bread-text text-start"> <span class="icon-2 pe-2">@ReadFile(iconPath + "phone.svg")</span><span>@dealer.Phone</span></div> 113 114 <div class="d-grid d-md-flex flex-row justify-content-md-between flex-wrap flex-md-nowrap align-items-center"> 115 <div class="pt-3 d-flex h-md-50 align-items-center flex-wrap"> 116 @if (subSegment.Contains("TOTAL")) 117 { 118 <div class="d-flex align-items-center mb-3 pe-1"> 119 <div class="me-1 dealerLine" id="color1" style="height: 15px; border-radius: 40px;"></div> 120 <div class="py-1"> 121 <h5 class="mb-0">@Translate("Dealer.Details.Total.Title", "Total forhandler av")</h5> 122 </div> 123 </div> 124 125 } 126 @if (subSegment.Contains("XTREME")) 127 { 128 <div class="d-flex align-items-center mb-3 pe-1" style="height: 15px; border-radius: 40px;"> 129 <div class="me-1 dealerLine" id="color2"></div> 130 <div class="py-1"> 131 <h5 class="mb-0">@Translate("Dealer.Details.Xtreme.Title", "Xtreme forhandler")</h5> 132 </div> 133 </div> 134 } 135 @if (subSegment.Contains("BÅT")) 136 { 137 <div class="d-flex align-items-center mb-3 pe-1" style="height: 15px; border-radius: 40px;"> 138 <div class="me-1 dealerLine" id="color3"></div> 139 <div class="py-1"> 140 <h5 class="mb-0">@Translate("Dealer.Details.Boat.Title", "Båt-forhandler av")</h5> 141 </div> 142 </div> 143 } 144 145 </div> 146 147 <button type="button" class="@(selectedDealer != null && dealer.Name == selectedDealer.Name ? "btn-secondary" : "btn-primary btn-dark") choseButton h-md-50" productId="@productId" user="@dealer.Name" userId="@dealer.Id" userPhone="@dealer.Phone" dealerNumber="@dealer.Number" addToCart="@addToCart" @(selectedDealer != null && dealer.Name == selectedDealer.Name ? "disabled" : "")> 148 @((selectedDealer != null && dealer.Name == selectedDealer.Name) ? "Valgt" : "Velg") 149 </button> 150 </div> 151 152 @*<div data-dealerid="@dealer.Id" class="unsureStock modalUnsureStock d-block align-items-center"> 153 <span class="icon-2" style="color: #D79C04;"> @ReadFile(iconPath + "download.svg")</span> 154 <span class="ms-2 regular-bold-text stockText">@Translate("Henter lagerstatus")</span> 155 </div>*@ 156 157 158 159 160 <div class="d-flex justify-content-start flex-column" style="text-align: left;"> 161 @if (spareParts == "true") { 162 <div class=""> 163 <span class="icon-2" style="color: #D79C04;"> @ReadFile(iconPath + "alert-circle.svg")</span> 164 <span class="ms-2 regular-bold-text">@Translate("Usikker lagerstatus")</span> 165 <div class="fs-8 w-100 w-md-50">Hvis varen ikke er på lager vil den sendes til forhandleren fra nettlageret vårt. Frakt kan tilkomme. Kontakt forhandler for leveringstid.</div> 166 </div> 167 } 168 else 169 { 170 if(productId != "0" && dealer.Stock > 0){ 171 <div data-dealerid="@dealer.Id" class="inStock align-items-center"> 172 <span class="icon-2" style="color: green;"> @ReadFile(iconPath + "check-circle.svg")</span> 173 <span class="ms-2 regular-bold-text">@Translate("På lager")</span> 174 </div> 175 } 176 if(productId != "0" && dealer.Stock <= 0){ 177 <div data-dealerid="@dealer.Id" class="notInStock align-items-center"> 178 <span class="icon-2" style="color: grey;"> @ReadFile(iconPath + "alert-circle.svg")</span> 179 <span class="ms-2 regular-bold-text">@Translate("Ikke på lager")</span> 180 </div> 181 <div class="small-text">@Translate("Kontakt oss for leveringstid")</div> 182 } 183 } 184 185 </div> 186 187 188 189 190 191 192 </div> 193 </div> 194 } 195 </div> 196 } 197 </div> 198 i++; 199 } 200 </div> 201 </div> 202 203 <style> 204 .border-red { 205 border: 1px solid rgb(152, 15, 15) !important; 206 } 207 208 .btn-selected { 209 background-color: red; 210 } 211 </style> 212 213