Apply
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.Template.TranslateText(String text, String defaultValue, String cultureName)
at Dynamicweb.Rendering.TemplateBase`1.Translate(String text, String defaultValue)
at CompiledRazorTemplates.Dynamic.RazorEngine_be81d1b98e784d799ef32119dd5c9913.Execute() in D:\inetpub\wwwroot\www.kwpn.nl\Files\Templates\Designs\Kwpn\ItemPublisher\Details\NewsDetail.cshtml:line 203
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 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 // KWPN-1733 Use image handler because content managers upload huge images from the content section of the CMS, which causes them not to be scaled immediately on upload 329 newsImage = $"/Admin/Public/GetImage.ashx?Image={newsImage}&Crop={(int)Kwpn.Models.Enumerations.ImageCrop.KeepAspectRatio}&Format=jpg&Width=800&Height=600&Compression=75&fillcanvas=false"; 330 <div class="row hidden-xs hidden-sm"> 331 <div class="@imageMdClass"> 332 <div class="news-image" style="background-image: url('@newsImage');"> 333 </div> 334 </div> 335 </div> 336 } 337 338 @if (!string.IsNullOrWhiteSpace(newsText)) 339 { 340 <div class="row"> 341 <div class="col-xs-12 news-par"> 342 @newsText 343 </div> 344 </div> 345 } 346 @if (hasVideo) 347 { 348 <div class="row kwpntv"> 349 <div class="col-xs-12 kwpntv--category-topx"> 350 <div class="result-container kwpntv-news-video-results" id="kwpntv-news-video-results-@newsParagraphId"></div> 351 </div> 352 </div> 353 @SnippetStart("JavascriptsBottom") 354 <script id="news-video-template-@newsParagraphId" type="text/html"> 355 {{if EmbedURL}} 356 <div class="col-xs-12 col-md-6"> 357 <a href="${EmbedURL}" target="_blank"> 358 <div class="embed-responsive embed-responsive-16by9"> 359 <img src="${Thumb}" /> 360 </div> 361 <div class="embed-title"> 362 {{if Title}} 363 <h3>${Title}</h3> 364 {{/if}} 365 </div> 366 {{if Duration}} 367 <div class="duration">${VideoHelper.ConvertDuraton(Duration)}</div> 368 {{/if}} 369 </a> 370 </div> 371 {{/if}} 372 </script> 373 <script> 374 $(document).ready(function () { 375 var videoContainer = $("#kwpntv-news-video-results-@newsParagraphId"); 376 videoContainer.html(""); // remove spinner 377 @for (int i = 1; i < 5; i++) 378 { 379 var videoId = GetInteger($"ItemPublisher:Item.VideoId{i}.Value"); 380 if (videoId > 0) { 381 <text> 382 var getVideoUrl = "/kwpnwebapi/videos/getvideobyid/@culture/@videoId"; 383 $.getJSON(getVideoUrl).done(function(video) { 384 if (video != null) 385 { 386 $("#news-video-template-@newsParagraphId").tmpl(video).appendTo(videoContainer); 387 } 388 }).fail(function(jqxhr, textStatus, error) { 389 var err = textStatus + ", " + error; 390 console.error("Request get video by id failed: " + err); 391 }); 392 </text> 393 } 394 } 395 }); 396 </script> 397 @SnippetEnd("JavascriptsBottom") 398 } 399 </article> 400 </div> 401 </div> 402 </div> 403 @{ 404 var carouselId = $"related-news-{newsParagraphId}"; 405 var carouselInterval = "false"; // false or set interval in ms 406 var carouselPeakNext = false; 407 var carouselResponsiveness = carouselPeakNext ? "col-xs-11 col-md-10 " : "col-xs-12 col-centered"; 408 } 409 <div id="related-news-wrapper" class="hidden"> 410 <div class="in-grid news-content"> 411 <div class="row"> 412 <div class="col-xs-12"><h3>@Translate("RelatedNews", "Related news")</h3></div> 413 </div> 414 </div> 415 <div class="break-grid-extra"> 416 <div class="row"> 417 <div class="@carouselResponsiveness"> 418 <div id="@carouselId" class="carousel carousel-multi slide" data-ride="carousel" data-type="multi" data-interval="@carouselInterval"> 419 <div class="carousel-inner" id="horses-for-sale-results-@newsParagraphId"> 420 <!-- filled by javascript --> 421 </div> 422 <!-- Controls --> 423 <div class="left carousel-control"> 424 <a href="#@carouselId" role="button" data-slide="prev"> 425 <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> 426 <span class="sr-only">Previous</span> 427 </a> 428 </div> 429 <div class="right carousel-control"> 430 <a href="#@carouselId" role="button" data-slide="next"> 431 <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 432 <span class="sr-only">Next</span> 433 </a> 434 </div> 435 </div> 436 </div> 437 </div> 438 </div> 439 </div> 440 441 <div class="break-grid-background"> 442 <div class="in-grid news-content"> 443 <div class="row"> 444 <div class="col-xs-12 col-md-6"> 445 <a href="javascript:history.back();" class="backlink"><i class="fa fa-chevron-left"></i>@Translate("BackToOverview", "Back to overview")</a> 446 </div> 447 <div class="col-xs-12 col-md-6"> 448 <div class="socialmediashare pull-right"> 449 <!-- AddToAny BEGIN --> 450 <div class="a2a_kit a2a_kit_size_32 a2a_default_style"> 451 <a class="a2a_dd" href="https://www.addtoany.com/share"></a> 452 <a class="a2a_button_facebook"></a> 453 <a class="a2a_button_twitter"></a> 454 <a class="a2a_button_google_plus"></a> 455 </div> 456 <script async src="https://static.addtoany.com/menu/page.js"></script> 457 <!-- AddToAny END --> 458 </div> 459 </div> 460 </div> 461 </div> 462 </div> 463 </div> 464 465 @SnippetStart("HeaderContent") 466 <meta property="og:title" content="@openGraphTitle" /> 467 <meta property="og:type" content="article" /> 468 <meta property="og:url" content="@openGraphUrl" /> 469 <meta property="og:image" content="@openGraphImage" /> 470 <meta property="og:description" content="@openGraphDescription" /> 471 <meta property="og:locale" content="@openGraphLocale" /> 472 <meta property="og:site_name" content="@openGraphSiteName" /> 473 <meta property="fb:app_id" content="234190117053664" /> 474 <script> 475 SEO.trackPageView("@seoPage"); 476 </script> 477 @SnippetEnd("HeaderContent") 478 479 @SnippetStart("JavascriptsBottom") 480 <script id="related-news-item" type="text/html"> 481 <div class="item"> 482 <div class="carousel-col"> 483 <div class="block clickable" data-url="/Default.aspx?ID=@GetString("ItemPublisher:Global.PageId")&itemId=@Kwpn.Models.Constants.StringConstants.ItemTypes.News:${id}"> 484 <div class="image" style="background-image:url('${image}')"> 485 <div class="date"><i class="fa fa-clock-o"></i> ${MarketplaceHelper.GetSinceDate(newsDate, "@Dynamicweb.Frontend.PageView.Current().Area.Culture.ToLower()")}</div> 486 </div> 487 <div class="bottom"> 488 <div class="text"> 489 <div class="truncate-overflow">${title}</div> 490 </div> 491 </div> 492 </div> 493 </div> 494 </div> 495 </script> 496 <script> 497 $(document).ready(function () { 498 // get related news 499 NewsHelper.GetRelatedNews('@culture', '@GetString("ItemPublisher:Item.Id.Value")', 6, 'related-news-wrapper', '@carouselId', 'horses-for-sale-results-@newsParagraphId', 'related-news-item'); 500 }); 501 </script> 502 @SnippetEnd("JavascriptsBottom") 503 } 504
€ 135,00 per year

KWPN Membership

  • Subscription to the digital KWPN Magazine (in Dutch)
  • Free advertising at KWPN Horses for Sale
Become a member now

About the KWPN

The KWPN (Studbook of the Royal Dutch Sport Horse) is a Netherlands-based organization specializing in the breeding of jumpers, dressage horses, harness horses, and Gelder horses.

More info

Official Partners


Cookies on the KWPN website

We request your agreement to the use of cookies on our website. More information is available on our cookie policy page.

Cookie Policy