Rijpaard














Tuigpaard





Gelders paard


Jong KWPN



Toepassen
Error executing template "Designs/Kwpn/ItemPublisher/Details/NewsDetail.cshtml"
System.IO.IOException: The process cannot access the file 'D:\inetpub\wwwroot\www.kwpn.nl\Files\Templates\Designs\Kwpn\Translations.xml' because it is being used by another process.
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)
at Dynamicweb.Rendering.Translation.Source.WriteDocument(XmlDocument document)
at Dynamicweb.Rendering.Translation.Source.Save()
at Dynamicweb.Rendering.Translation.Source.UpdateTranslationSource(Source source, IEnumerable`1 newKeys, String designName, IEnumerable`1 cultures)
at Dynamicweb.Rendering.TemplateBase`1.Translate(String text, String defaultValue, String cultureName)
at CompiledRazorTemplates.Dynamic.RazorEngine_c3de684a849346af9298c70162b8ec1f.Execute() in D:\inetpub\wwwroot\www.kwpn.nl\Files\Templates\Designs\Kwpn\ItemPublisher\Details\NewsDetail.cshtml:line 88
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.b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @using System.Globalization 2 @using System.Linq 3 @using Kwpn.Models.Constants 4 @using Kwpn.Models.Enumerations 5 @using Kwpn.Repository.Helpers 6 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 7 @{ 8 var culture = GetGlobalValue("Global:Area.LongLang"); 9 var cultureInfo = new CultureInfo(GetGlobalValue("Global:Area.LongLang")); 10 var newsParagraphId = GetInteger("ItemPublisher:Global.ParagraphId"); 11 12 // news detail 13 var newsTitle = GetString("ItemPublisher:Item.NewsTitle.Value"); 14 var newsDate = GetDate("ItemPublisher:Item.NewsDate.Value"); 15 var newsDateTime = FormatHelpers.GetDateTime(newsDate, null, cultureInfo, Translate("EventDateDevider", "to")); 16 var newsText = GetString("ItemPublisher:Item.NewsText.Value"); 17 if (!string.IsNullOrEmpty(newsText) && !(newsText.IndexOf("<p>") >= 0 || newsText.IndexOf("<br>") >= 0)) 18 { 19 newsText = newsText.Replace("\n", "<br />"); 20 } 21 22 //image 23 var newsCategories = GetString("ItemPublisher:Item.NewsCategories.Value"); 24 var newsImage = GetString("ItemPublisher:Item.NewsImage.Value"); 25 if (string.IsNullOrWhiteSpace(newsImage) && !string.IsNullOrWhiteSpace(newsCategories)) 26 { 27 newsImage = ImageHelper.GetDefaultImageByCategory(ImageType.NewsCategoryImage, newsCategories.Split(',').FirstOrDefault().Trim()); 28 } 29 30 // extra 31 var noteText = GetString("ItemPublisher:Item.NoteText.Value"); 32 var newsRegion = KwpnNewsHelper.GetNewsRegion(GetString("ItemPublisher:Item.Regions"), culture, noteText); 33 if (!string.IsNullOrWhiteSpace(noteText)) { noteText = string.Format("<div class='note'>{0}</div>", noteText); } 34 var hightlightText = GetString("ItemPublisher:Item.HighlightText.Value"); 35 if (!string.IsNullOrWhiteSpace(hightlightText)) { hightlightText = string.Format("<div class='highlight'>{0}</div>", hightlightText); } 36 var notification = GetString("ItemPublisher:Item.Notification.Value"); 37 38 // linked horsed 39 var linkedHorses = HorseHelper.GetHorsesByAnimalCodes(GetString("ItemPublisher:Item.Horses.Value"), GetGlobalValue("Global:Area.LongLang")); 40 var iLinkedHorseCounter = 0; 41 42 // linked 43 var listOfEventItems = new List<Dynamicweb.Content.Items.Item>(); 44 var kwpnEvents = GetString("ItemPublisher:Item.KwpnEvents.Value"); 45 if (!string.IsNullOrWhiteSpace(kwpnEvents)) 46 { 47 var kwpnEventIdList = kwpnEvents.Split(',').ToList(); 48 foreach (var kwpnEventId in kwpnEventIdList) 49 { 50 var eventItem = Dynamicweb.Content.Items.ItemManager.Storage.GetById(StringConstants.ItemTypes.Event, kwpnEventId); 51 if (eventItem != null) 52 { 53 listOfEventItems.Add(eventItem); 54 } 55 } 56 } 57 58 var showAside = (listOfEventItems.Any() || linkedHorses.Any()); 59 60 var imageMdClass = "col-md-12"; 61 var contentMdClass = "col-md-7 col-md-pull-4"; 62 63 // social media share 64 var openGraphTitle = newsTitle; 65 var openGraphUrl = string.Format("{0}{1}", AreaHelper.GetHost(), System.Web.HttpContext.Current.Request.RawUrl); 66 var openGraphImage = newsImage; 67 var openGraphDefaultImage = string.Format("{0}/Files/Templates/Designs/Kwpn/Images/OpenGraph_NoImg.jpg", AreaHelper.GetHost()); 68 if (string.IsNullOrWhiteSpace(openGraphImage)) 69 { 70 var images = FormatHelpers.GetImagesInHTMLString(GetString("ItemPublisher:Item.NewsText.Value")); 71 var firstImage = ""; 72 if (images.Any()) 73 { 74 firstImage = images.FirstOrDefault(); 75 if (!string.IsNullOrWhiteSpace(firstImage)) 76 { 77 openGraphImage = System.Text.RegularExpressions.Regex.Match(firstImage, "<img.+?src=[\"'](.+?)[\"'].+?>", System.Text.RegularExpressions.RegexOptions.IgnoreCase).Groups[1].Value; 78 79 } 80 } 81 } 82 if (string.IsNullOrWhiteSpace(openGraphImage) || openGraphImage.Length < 10) // root directory left overs negeren: /Files/ 83 { 84 openGraphImage = openGraphDefaultImage; 85 } 86 var openGraphDescription = GetString("ItemPublisher:Item.NewsText.Value").HtmlRemove().ClipLength(100, true); 87 var openGraphLocale = GetGlobalValue("Global:Area.LongLang").Replace("-", "_"); 88 var openGraphSiteName = Translate("OpenGraph_SiteName", "KWPN Royal Dutch Sport Horse"); 89 90 // SEO: seoPage is used as base url for virtual pageviews 91 var seoPage = GetGlobalValue("Global:Pageview.Url"); 92 if (seoPage.Contains("?")) 93 { 94 seoPage = seoPage.Split('?')[0]; 95 } 96 seoPage = string.Format("{0}/{1}/{2}", seoPage, GetString("ItemPublisher:Item.Field.Id"), GetString("ItemPublisher:Item.NewsTitle.Value").Replace(" ", "-").ToLower().UrlEncode()); 97 98 var videoId1 = GetInteger("ItemPublisher:Item.VideoId1.Value"); 99 var videoId2 = GetInteger("ItemPublisher:Item.VideoId2.Value"); 100 var videoId3 = GetInteger("ItemPublisher:Item.VideoId3.Value"); 101 var videoId4 = GetInteger("ItemPublisher:Item.VideoId4.Value"); 102 var hasVideo = videoId1 > 0 || videoId2 > 0 || videoId3 > 0 || videoId4 > 0; 103 104 <div class="break-grid content-container page-content-aside" id="news-detail"> 105 <div class="break-grid-background"> 106 <div class="in-grid news-content"> 107 <div class="row"> 108 <div class="background-head-aside-xs"> 109 <div class="background-head-xs"> 110 <div class="col-xs-12 page-header"> 111 <div class="row"> 112 <div class="col-xs-12 col-md-7"> 113 <div class="row"> 114 @if (!string.IsNullOrWhiteSpace(noteText)) 115 { 116 <div class="col-md-6 hidden-xs hidden-sm">@noteText</div> 117 } 118 @if (!string.IsNullOrWhiteSpace(hightlightText)) 119 { 120 <div class="col-md-6 hidden-xs hidden-sm">@hightlightText</div> 121 } 122 </div> 123 <div class="row"> 124 <div class="col-xs-12"> 125 <h1>@newsTitle</h1> 126 </div> 127 </div> 128 <div class="row"> 129 <div class="col-xs-12"> 130 @if (!string.IsNullOrWhiteSpace(newsDateTime)) 131 { 132 <span class="date"><i class="fa fa-clock-o"></i> @newsDateTime</span> 133 } 134 <div class="visible-xs"></div> 135 @if (!string.IsNullOrWhiteSpace(newsRegion)) 136 { 137 <span class="region"><i class="fa fa-location-arrow"></i> @newsRegion</span> 138 } 139 </div> 140 </div> 141 </div> 142 @if (!string.IsNullOrEmpty(newsImage)) 143 { 144 <div class="col-xs-12 hidden-md hidden-lg"> 145 <div class="news-image"><img src="@newsImage" alt="News image" /></div> 146 </div> 147 } 148 @if (!string.IsNullOrWhiteSpace(noteText)) 149 {<div class="col-xs-12 hidden-md hidden-lg">@noteText</div>} 150 @if (!string.IsNullOrWhiteSpace(hightlightText)) 151 {<div class="col-xs-12 hidden-md hidden-lg">@hightlightText</div>} 152 @if (!string.IsNullOrWhiteSpace(notification)) 153 { 154 <div class="col-xs-12 hidden-md hidden-lg"> 155 <div class="notification"> 156 @notification 157 </div> 158 </div> 159 } 160 </div> 161 </div> 162 </div> 163 <div class="background-aside-xs"> 164 <aside class="col-xs-12 col-md-4 col-md-push-8 news-detail-aside"> 165 166 <!-- /204473129/NieuwsDetail/Banner1 --> 167 <div id='div-gpt-ad-banner1-1' class="google-container google-container--size--b google-container--center google-container--margin-bottom google-container--margin-top-p"> 168 <script> 169 googletag.cmd.push(function () { googletag.display('div-gpt-ad-banner1-1'); }); 170 </script> 171 </div> 172 173 @if (showAside) 174 { 175 <div class="page-aside"> 176 @if (linkedHorses.Any()) 177 { 178 <h2 id="linkedhorses-aside-title" data-childId="linkedhorses-aside-content" class="notactive"><span>@Translate("LinkedHorses", "Linked horses")</span></h2> 179 <div id="linkedhorses-aside-content" class="aside-content notactive"> 180 <div class="linkedHorses"> 181 @foreach (var linkedHorse in linkedHorses) 182 { 183 // modulo for row color display 184 var mod = "0"; 185 if (iLinkedHorseCounter % 2 == 0) 186 { 187 mod = "1"; 188 } 189 190 // gender info 191 var genderClass = "fa-question"; 192 var genderAbbr = ""; 193 var gender = Kwpn.Models.Enumerations.Gender.UNKNOWN; 194 Enum.TryParse(linkedHorse.Gender.ToUpper(), out gender); 195 switch (gender) 196 { 197 case Kwpn.Models.Enumerations.Gender.HENGST: 198 genderClass = "fa-mars"; 199 genderAbbr = Translate("Stallion", "Stallion"); 200 break; 201 case Kwpn.Models.Enumerations.Gender.MERRIE: 202 genderClass = "fa-venus"; 203 genderAbbr = Translate("Mare", "Mare"); 204 break; 205 case Kwpn.Models.Enumerations.Gender.RUIN: 206 genderClass = "fa-mars"; //fa-mars-stroke-h 207 genderAbbr = Translate("Gelding", "Gelding"); 208 break; 209 } 210 211 // horse info 212 var horseName = HorseHelper.GetHorseName(linkedHorse.SportsName, linkedHorse.AnimalName, linkedHorse.DateOfBirth); 213 214 // father info 215 var fatherName = ""; 216 var father = linkedHorse.GetPredigreeByPrefix(Kwpn.Models.Constants.StringConstants.PedigreePrefixes.Father); 217 if (father != null) 218 { 219 fatherName = father.AnimalName; 220 } 221 else 222 { 223 fatherName = Translate("Unknown", "Unknown"); 224 } 225 var fatherNameAbbr = Translate("FathersName", "Fathers name").JsEncode(); 226 227 // mothers father info 228 var mothersFatherName = ""; 229 var mothersFather = linkedHorse.GetPredigreeByPrefix(Kwpn.Models.Constants.StringConstants.PedigreePrefixes.MothersFather); 230 if (mothersFather != null) 231 { 232 mothersFatherName = mothersFather.AnimalName; 233 } 234 else 235 { 236 mothersFatherName = Translate("Unknown", "Unknown"); 237 } 238 var mothersFatherNameAbbr = Translate("MothersFathersName", "Mothers fathers name").JsEncode(); 239 var databaseLink = HorseHelper.GetHorseInfoPageUrl(GetGlobalValue("Global:Area.LongLang"), linkedHorse.AnimalCode); 240 <a href="@databaseLink"> 241 <div class="row mod-@mod"> 242 <div class="col-xs-2"> 243 <span class="gender"><i class="fa @genderClass" title='@genderAbbr.JsEncode()'></i></span> 244 </div> 245 <div class="col-xs-10"> 246 <span class="name">@horseName</span> 247 <span class="parents"> 248 <abbr title='@fatherNameAbbr'>@fatherName</abbr> x <abbr title='@mothersFatherNameAbbr'>@mothersFatherName</abbr> 249 </span> 250 </div> 251 </div> 252 </a> 253 iLinkedHorseCounter++; 254 } 255 </div> 256 </div> 257 } 258 @if (listOfEventItems.Any()) 259 { 260 var kwpnEventCounter = 0; 261 var eventPageId = AreaHelper.GetAreaItemStringValueBySystemName(StringConstants.PageIdSystemNames.EventPageId); 262 263 if (!string.IsNullOrWhiteSpace(eventPageId)) 264 { 265 <h2 id="linkedevents-aside-title" data-childId="linkedevents-aside-content" class="notactive"><span>@Translate("LinkedEvents", "Linked events")</span></h2> 266 <div id="linkedevents-aside-content" class="aside-content notactive"> 267 <div class="linkedEvents"> 268 @foreach (var kwpnEvent in listOfEventItems) 269 { 270 // modulo for row color display 271 var mod = "0"; 272 if (kwpnEventCounter % 2 == 0) 273 { 274 mod = "1"; 275 } 276 var kwpnEventId = ItemHelper.GetItemValue<int>(kwpnEvent, StringConstants.ItemTypes.Event_Id); 277 var kwpnEventTitle = ItemHelper.GetItemValue<string>(kwpnEvent, StringConstants.ItemTypes.Event_Title); 278 var dateFrom = ItemHelper.GetItemValue<DateTime>(kwpnEvent, StringConstants.ItemTypes.Event_FromDate); 279 var dateTo = ItemHelper.GetItemValue<DateTime>(kwpnEvent, StringConstants.ItemTypes.Event_ToDate); 280 var eventDateTime = FormatHelpers.GetDateTime(dateFrom, dateTo, cultureInfo, Translate("EventDateDevider", "to")); 281 var kwpnEventLink = string.Format("/Default.aspx?ID={0}&itemId={1}:{2}", eventPageId, StringConstants.ItemTypes.Event, kwpnEventId); 282 var customPageLink = ItemHelper.GetItemValue<string>(kwpnEvent, StringConstants.ItemTypes.Event_CustomEventPage); 283 if (!string.IsNullOrEmpty(customPageLink)) 284 { 285 kwpnEventLink = customPageLink; 286 } 287 <a href="@kwpnEventLink"> 288 <div class="row mod-@mod"> 289 <div class="col-xs-2"> 290 <span class="clock"><i class="fa fa-clock-o"></i></span> 291 </div> 292 <div class="col-xs-10"> 293 <span class="date-time">@eventDateTime</span> 294 <span class="title">@kwpnEventTitle</span> 295 </div> 296 </div> 297 </a> 298 kwpnEventCounter++; 299 } 300 </div> 301 </div> 302 } 303 } 304 </div> 305 } 306 307 308 309 </aside> 310 </div> 311 </div> 312 313 <article class="col-xs-12 @contentMdClass page-content news-detail-output"> 314 @if (!string.IsNullOrWhiteSpace(notification)) 315 { 316 <div class="row"> 317 <div class="hidden-xs hidden-sm col-md-12"> 318 <div class="notification"> 319 @notification 320 </div> 321 </div> 322 </div> 323 } 324 325 @*IMAGE FOR LARGE VIEW*@ 326 @if (!string.IsNullOrEmpty(newsImage)) 327 { 328 <div class="row hidden-xs hidden-sm"> 329 <div class="@imageMdClass"> 330 <div class="news-image" style="background-image: url('@newsImage');"> 331 </div> 332 </div> 333 </div> 334 } 335 336 @if (!string.IsNullOrWhiteSpace(newsText)) 337 { 338 <div class="row"> 339 <div class="col-xs-12 news-par"> 340 @newsText 341 </div> 342 </div> 343 } 344 @if (hasVideo) 345 { 346 <div class="row kwpntv"> 347 <div class="col-xs-12 kwpntv--category-topx"> 348 <div class="result-container kwpntv-news-video-results" id="kwpntv-news-video-results-@newsParagraphId"></div> 349 </div> 350 </div> 351 @SnippetStart("JavascriptsBottom") 352 <script id="news-video-template-@newsParagraphId" type="text/html"> 353 {{if EmbedURL}} 354 <div class="col-xs-12 col-md-6"> 355 <a href="${EmbedURL}" target="_blank"> 356 <div class="embed-responsive embed-responsive-16by9"> 357 <img src="${Thumb}" /> 358 </div> 359 <div class="embed-title"> 360 {{if Title}} 361 <h3>${Title}</h3> 362 {{/if}} 363 </div> 364 {{if Duration}} 365 <div class="duration">${VideoHelper.ConvertDuraton(Duration)}</div> 366 {{/if}} 367 </a> 368 </div> 369 {{/if}} 370 </script> 371 <script> 372 $(document).ready(function () { 373 var videoContainer = $("#kwpntv-news-video-results-@newsParagraphId"); 374 videoContainer.html(""); // remove spinner 375 @for (int i = 1; i < 5; i++) 376 { 377 var videoId = GetInteger($"ItemPublisher:Item.VideoId{i}.Value"); 378 if (videoId > 0) { 379 <text> 380 var getVideoUrl = "/kwpnwebapi/videos/getvideobyid/@culture/@videoId"; 381 $.getJSON(getVideoUrl).done(function(video) { 382 if (video != null) 383 { 384 $("#news-video-template-@newsParagraphId").tmpl(video).appendTo(videoContainer); 385 } 386 }).fail(function(jqxhr, textStatus, error) { 387 var err = textStatus + ", " + error; 388 console.error("Request get video by id failed: " + err); 389 }); 390 </text> 391 } 392 } 393 }); 394 </script> 395 @SnippetEnd("JavascriptsBottom") 396 } 397 </article> 398 </div> 399 </div> 400 </div> 401 @{ 402 var carouselId = $"related-news-{newsParagraphId}"; 403 var carouselInterval = "false"; // false or set interval in ms 404 var carouselPeakNext = false; 405 var carouselResponsiveness = carouselPeakNext ? "col-xs-11 col-md-10 " : "col-xs-12 col-centered"; 406 } 407 <div id="related-news-wrapper" class="hidden"> 408 <div class="in-grid news-content"> 409 <div class="row"> 410 <div class="col-xs-12"><h3>@Translate("RelatedNews", "Related news")</h3></div> 411 </div> 412 </div> 413 <div class="break-grid-extra"> 414 <div class="row"> 415 <div class="@carouselResponsiveness"> 416 <div id="@carouselId" class="carousel carousel-multi slide" data-ride="carousel" data-type="multi" data-interval="@carouselInterval"> 417 <div class="carousel-inner" id="horses-for-sale-results-@newsParagraphId"> 418 <!-- filled by javascript --> 419 </div> 420 <!-- Controls --> 421 <div class="left carousel-control"> 422 <a href="#@carouselId" role="button" data-slide="prev"> 423 <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> 424 <span class="sr-only">Previous</span> 425 </a> 426 </div> 427 <div class="right carousel-control"> 428 <a href="#@carouselId" role="button" data-slide="next"> 429 <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 430 <span class="sr-only">Next</span> 431 </a> 432 </div> 433 </div> 434 </div> 435 </div> 436 </div> 437 </div> 438 439 <div class="break-grid-background"> 440 <div class="in-grid news-content"> 441 <div class="row"> 442 <div class="col-xs-12 col-md-6"> 443 <a href="javascript:history.back();" class="backlink"><i class="fa fa-chevron-left"></i>@Translate("BackToOverview", "Back to overview")</a> 444 </div> 445 <div class="col-xs-12 col-md-6"> 446 <div class="socialmediashare pull-right"> 447 <!-- AddToAny BEGIN --> 448 <div class="a2a_kit a2a_kit_size_32 a2a_default_style"> 449 <a class="a2a_dd" href="https://www.addtoany.com/share"></a> 450 <a class="a2a_button_facebook"></a> 451 <a class="a2a_button_twitter"></a> 452 <a class="a2a_button_google_plus"></a> 453 </div> 454 <script async src="https://static.addtoany.com/menu/page.js"></script> 455 <!-- AddToAny END --> 456 </div> 457 </div> 458 </div> 459 </div> 460 </div> 461 </div> 462 463 @SnippetStart("HeaderContent") 464 <meta property="og:title" content="@openGraphTitle" /> 465 <meta property="og:type" content="article" /> 466 <meta property="og:url" content="@openGraphUrl" /> 467 <meta property="og:image" content="@openGraphImage" /> 468 <meta property="og:description" content="@openGraphDescription" /> 469 <meta property="og:locale" content="@openGraphLocale" /> 470 <meta property="og:site_name" content="@openGraphSiteName" /> 471 <meta property="fb:app_id" content="234190117053664" /> 472 <script> 473 SEO.trackPageView("@seoPage"); 474 </script> 475 @SnippetEnd("HeaderContent") 476 477 @SnippetStart("JavascriptsBottom") 478 <script id="related-news-item" type="text/html"> 479 <div class="item"> 480 <div class="carousel-col"> 481 <div class="block clickable" data-url="/Default.aspx?ID=@GetString("ItemPublisher:Global.PageId")&itemId=@Kwpn.Models.Constants.StringConstants.ItemTypes.News:${id}"> 482 <div class="image" style="background-image:url('${image}')"> 483 <div class="date"><i class="fa fa-clock-o"></i> ${MarketplaceHelper.GetSinceDate(newsDate, "@Dynamicweb.Frontend.PageView.Current().Area.Culture.ToLower()")}</div> 484 </div> 485 <div class="bottom"> 486 <div class="text"> 487 <div class="truncate-overflow">${title}</div> 488 </div> 489 </div> 490 </div> 491 </div> 492 </div> 493 </script> 494 <script> 495 $(document).ready(function () { 496 // get related news 497 NewsHelper.GetRelatedNews('@culture', '@GetString("ItemPublisher:Item.Id.Value")', 6, 'related-news-wrapper', '@carouselId', 'horses-for-sale-results-@newsParagraphId', 'related-news-item'); 498 }); 499 </script> 500 @SnippetEnd("JavascriptsBottom") 501 } 502
€121,30 per jaar

Lidmaatschap KWPN

  • Iedere maand het KWPN Magazine - In de Strengen
  • Onbeperkt toegang tot KWPN.tv
  • Gratis advertenties plaatsen op KWPN Horses for Sale
Word nu lid
€22,- per jaar

JongKWPN lidmaatschap

  • Ben jij tussen de 16 en 30 jaar?
  • Ben jij geïnteresseerd in fokkerij en sport? 

Dan is JongKWPN vast en zeker iets voor jou! JongKWPN biedt een gevarieerd programma. 

Word nu lid

Official Partners


Het KWPN maakt gebruik van cookies

Wij vragen uw akkoord voor het gebruik van cookies op onze website. Meer informatie is beschikbaar in ons cookiebeleid.

Cookiebeleid