EIVA is now part of Kraken Robotics
Together, we're creating a world-leading marine technology company focused on transforming subsea intelligence.

Error executing template "/Designs/Eiva/Paragraph/TrainingCoursesList.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_876ea26f118e466ea23de38d57809f6f.<>c__DisplayClass0_0.<DisplayOTraining>b__0(TextWriter __razor_helper_writer) in E:\Webroot\Eiva.com\Web\Files\Templates\Designs\Eiva\Paragraph\TrainingCoursesList.cshtml:line 121 at CompiledRazorTemplates.Dynamic.RazorEngine_876ea26f118e466ea23de38d57809f6f.Execute() in E:\Webroot\Eiva.com\Web\Files\Templates\Designs\Eiva\Paragraph\TrainingCoursesList.cshtml:line 52 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 Dynamicweb.Content 2 @using Dynamicweb.Content.Items 3 @using Dynamicweb.Ecommerce 4 @using Dynamicweb.Ecommerce.Prices 5 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 6 7 @{ 8 Item thisItem = Dynamicweb.Extensibility.ServiceLocator.Current.GetItemService().GetItem("TrainingCoursesList", GetString("Item.Id")); 9 //Item thisItem = new Item(GetString("Item.Id")); 10 string productPageId = Pageview.Area.Item["Productpage_Id"].ToString(); 11 var productListTrainingCourses = !string.IsNullOrWhiteSpace(thisItem.First(e => e.Key == "TrainingCoursesProduct").Value.ToString()) ? thisItem.First(e => e.Key == "TrainingCoursesProduct") : new KeyValuePair<string, object>(); 12 var productListELearning = !string.IsNullOrWhiteSpace(thisItem.First(e => e.Key == "ELearningProduct").Value.ToString()) ? thisItem.First(e => e.Key == "ELearningProduct") : new KeyValuePair<string, object>(); 13 var newArrayProductListELearning = Enumerable.Empty<KeyValuePair<string, string>>(); 14 if (!productListELearning.Equals(default(KeyValuePair<string, object>))) 15 { 16 newArrayProductListELearning = newArrayProductListELearning.Concat(productListELearning.Value.ToString().Split(',').Select(x => new KeyValuePair<string, string>(productListELearning.Key, x))); 17 } 18 if (!productListTrainingCourses.Equals(default(KeyValuePair<string, object>))) 19 { 20 newArrayProductListELearning = newArrayProductListELearning.Concat(productListTrainingCourses.Value.ToString().Split(',').Select(x => new KeyValuePair<string, string>(productListTrainingCourses.Key, x))); 21 } 22 var readMoreLinkELearning = string.Empty; 23 var readMoreLinkTitleELearning = string.Empty; 24 var readMoreLinkTrainingCourses = string.Empty; 25 var readMoreLinkTitleTrainingCourses = string.Empty; 26 27 if (!string.IsNullOrWhiteSpace(GetString("Item.ELearningLink.Title"))) 28 { 29 readMoreLinkELearning = GetString("Item.ELearningLink.Link"); 30 readMoreLinkTitleELearning = GetString("Item.ELearningLink.Title"); 31 } 32 33 if (!string.IsNullOrWhiteSpace(GetString("Item.TrainingCoursesLink.Title"))) 34 { 35 readMoreLinkTrainingCourses = GetString("Item.TrainingCoursesLink.Link"); 36 readMoreLinkTitleTrainingCourses = GetString("Item.TrainingCoursesLink.Title"); 37 } 38 var cardTexts = new 39 { 40 cardLabelELearning1 = GetString("Item.ELearningLabel_1"), 41 cardLabelELearning2 = GetString("Item.ELearningLabel_2"), 42 cardLinkTextELearning = Translate("Whats included", "Whats included"), 43 cardLabelTraining1 = GetString("Item.TrainingCoursesLabel_1"), 44 cardLabelTraining2 = GetString("Item.TrainingCoursesLabel_2"), 45 cardLinkTextTraining = Translate("See training course", "See training course") 46 }; 47 } 48 <section class="o-training" id="@GetString("Global.ParagraphId")"> 49 <div class="container"> 50 <div class="row"> 51 <div class="col-xs-12 col-sm-8"> 52 @DisplayOTraining(new 53 { 54 type = "ELearning", 55 header = GetString("Item.ELearningHeader"), 56 teaser = GetString("Item.ELearningContent"), 57 productList = newArrayProductListELearning, 58 cardTexts = cardTexts, 59 productPageId = productPageId, 60 readMoreLink= readMoreLinkELearning, 61 readMoreLinkTitle= readMoreLinkTitleELearning 62 }) 63 </div> 64 <div class="col-xs-12 col-sm-4"> 65 @DisplayOTraining(new 66 { 67 type = "TrainingCourses", 68 header = GetString("Item.TrainingCoursesHeader"), 69 teaser = GetString("Item.TrainingCoursesContent"), 70 productList = new List<KeyValuePair<string, string>>(), 71 cardTexts = cardTexts, 72 productPageId = productPageId, 73 readMoreLink = readMoreLinkTrainingCourses, 74 readMoreLinkTitle = readMoreLinkTitleTrainingCourses 75 }) 76 </div> 77 </div> 78 </div> 79 </section> 80 81 82 83 84 85 86 87 @helper DisplayOTraining(dynamic colData) 88 { 89 bool isTrainingCourse = colData.GetType().GetProperty("type") != null && colData.type == "TrainingCourses"; 90 string modifier = isTrainingCourse ? "o-listTraining--small" : "o-listTraining--large"; 91 string header = colData.GetType().GetProperty("header") != null ? colData.header : ""; 92 string teaser = colData.GetType().GetProperty("teaser") != null ? colData.teaser : ""; 93 94 string productPageId = colData.GetType().GetProperty("productPageId") != null ? colData.productPageId : ""; 95 dynamic cardTexts = colData.GetType().GetProperty("cardTexts") != null ? colData.cardTexts : ""; 96 97 string readMoreLink = colData.GetType().GetProperty("readMoreLink") != null ? colData.readMoreLink : ""; 98 string readMoreLinkTitle = colData.GetType().GetProperty("readMoreLinkTitle") != null ? colData.readMoreLinkTitle : ""; 99100 IEnumerable<KeyValuePair<string, string>> productList = colData.GetType().GetProperty("productList") != null ? (IEnumerable<KeyValuePair<string, string>>)colData.productList : null; 101 int counter = 1; 102 var type = ""; 103104105 <div class="o-listTraining @modifier"> 106 <div class="o-listTraining__text"> 107 <h3 class="o-listTraining__header">@header</h3> 108 <div class="o-listTraining__teaser m-rich-text-editor"> 109 @teaser 110 </div> 111 </div> 112113 <div class="o-listTraining__cardsAndLinks"> 114 @if (productList.Any()) 115 { 116 <ul class="o-listTraining__list"> 117 @foreach (var ie in productList) 118 { 119 string prodId = ie.Value.Substring(2).TrimEnd(':'); 120 var prod = Dynamicweb.Ecommerce.Products.Product.GetProductById(prodId); 121 string prodName = prod.Name; 122 string prodImage = "/Files/Images/Products/" + prod.GetPropertyValue("Number") + ".jpg"; ; 123 //string prodImage = prod.ImageLarge.Replace(" ", "%20"); 124 string prodLink = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("default.aspx?id=" + productPageId + "&productId=" + prodId); 125 string prodTeaser = prod.ShortDescription; 126 if (type != ie.Key) 127 { 128 counter = 1; 129 type = ie.Key; 130 } 131 isTrainingCourse = type == "TrainingCoursesProduct"; 132133 string cardLinkText = isTrainingCourse || counter == 3 ? cardTexts.cardLinkTextTraining : cardTexts.cardLinkTextELearning; 134135 <li class="o-listTraining__listItem"> 136 <div class="m-cardImageText m-cardImageText--trainingList"> 137 <a href="@prodLink" class="m-cardImageText__link"> 138 <span class="m-cardImageText__label@(isTrainingCourse ? " training-course-label" : "")"> 139 @(isTrainingCourse ? (counter == 1 ? cardTexts.cardLabelTraining1 : cardTexts.cardLabelTraining2) : (counter == 1 ? cardTexts.cardLabelELearning1 : cardTexts.cardLabelELearning2)) 140 </span> 141 @{ 142 counter++; 143 } 144 <figure class="m-cardImageText__figure"> 145 <img class="lazyload lazyload-measure lazyload-bg a-image m-cardImageText__image" 146 src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" 147 alt="@prodName" 148 property="contentUrl" 149 data-src="@(prodImage)" 150 data-query-obj='{ "mode":"crop" , "quality":"80", "upscale":false }'> 151 <noscript> 152 <img src="@(prodImage)?mode=crop&width=350" 153 alt="@prodName"> 154 </noscript> 155 </figure> 156157 <h3 class="m-cardImageText__header">@prodName</h3> 158 <div class="m-cardImageText__body"> 159 @if (isTrainingCourse || counter == 3) 160 { 161 DateTime fromDateTime = Convert.ToDateTime(prod.GetCategoryValue("Class_room_training", "Course_date_start")); 162 DateTime toDateTime = Convert.ToDateTime(prod.GetCategoryValue("Class_room_training", "Course_date_end")); 163 string location = (prod.GetCategoryValue("Class_room_training", "Location") != null) ? prod.GetCategoryValue("Class_room_training", "Location").ToString() : ""; 164165 <p class="m-cardImageText__facts"> 166 @if (fromDateTime.ToString("dd-MM-yyyy") != "01-01-0001") 167 { 168 if (fromDateTime.Year == toDateTime.Year && fromDateTime.Month == toDateTime.Month) 169 { 170 @: @fromDateTime.ToString("%d")-@toDateTime.ToString("d MMM yyyy") 171 } 172 else 173 { 174 @fromDateTime.ToString("d MMM")<text> – </text>@toDateTime.ToString("d MMM yyyy") 175 } 176 } 177 <span class="m-cardImageText__place">@location</span> 178 </p> 179 } 180 <p class="m-cardImageText__teaser">@prodTeaser</p> 181 </div> 182183 <span class="m-cardImageText__linkFake"> 184 <span class="m-cardImageText__linkArrow"> 185 › 186 </span> 187 @cardLinkText 188 </span> 189 </a> 190 </div> 191 </li> 192 } 193 </ul> 194 } 195 @if (!string.IsNullOrEmpty(readMoreLink) && !string.IsNullOrEmpty(readMoreLinkTitle)) 196 { 197 <a href="@readMoreLink" title="@readMoreLinkTitle" class="a-link o-listTraining__readMoreLink" property="url">@readMoreLinkTitle</a> 198 } 199200 </div> 201202 </div> 203204 }
NaviSuite trade-in offer
Would you like to upgrade your current software spread?
With the EIVA NaviSuite trade-in offer, you can get up to 85% off the price of the NaviSuite software product(s) that match(es) your current software setup by trading the latter for NaviSuite licences.