Favorites

Exception in template (Designs\HiCon2016\Paragraph\pageModules.cshtml): System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at CompiledRazorTemplates.Dynamic.bccafafdbfacef.b__0(TextWriter __razor_helper_writer)
   at RazorEngine.Templating.TemplateWriter.WriteTo(TextWriter writer)
   at RazorEngine.Templating.TemplateBase.Write(TemplateWriter helper)
   at CompiledRazorTemplates.Dynamic.bccafafdbfacef.Execute()
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
   at RazorEngine.Templating.TemplateService.Run(ITemplate template, DynamicViewBag viewBag)
   at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName)
   at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()
@using System.IO; @{ var item = GetString("Item.SystemName"); } @helper DisplayHeader() { var Images = GetLoop("Item.Billeder"); bool Multiple = false; if(Images.Count() > 1 ) { Multiple = true; } if( Multiple ) { <text> <div class="main-header"> <div id='header-carousel-@(GetValue("Item.ID"))' class="carousel slide" data-ride="carousel"> @if(Multiple) { <text> <!-- Indicators --> <ol class="carousel-indicators"> @{ int indicatorIndex = 0; } @foreach( var img in Images ) { string addition = ""; if( indicatorIndex == 0 ) { addition = "active"; } <text> <li data-target='#header-carousel-@(GetValue("Item.ID"))' data-slide-to="@(indicatorIndex)" class="@(addition)"></li> </text> indicatorIndex++; } </ol> </text> } <!-- Wrapper for slides --> <div class="carousel-inner" role="listbox"> @{ int slideIndex = 0; } @foreach( var img in Images ) { string addition = ""; if( slideIndex == 0 ) { addition = "active"; } string target = "_self"; if( img.GetBoolean("Item.Billeder.AabenINytVindue") ) { target = "_blank"; } <text> <div class="item @(addition)"> @if( !img.GetBoolean("Item.Billeder.VisSomKnap") && !string.IsNullOrEmpty( img.GetString("Item.Billeder.Link") ) ) { <text> <a href='@(img.GetValue("Item.Billeder.Link"))' target='@(target)'> <img src='@(img.GetValue("Item.Billeder.Billede"))' alt="@(img.GetValue("Item.Billeder.AlternativTekst"))"> </a> </text> } else { <text> <img src='@(img.GetValue("Item.Billeder.Billede"))' alt="@(img.GetValue("Item.Billeder.AlternativTekst"))"> </text> } <div class="carousel-caption"> <div class="inside-caption"> <h3>@(img.GetValue("Item.Billeder.Overskrift"))</h3> <p>@(img.GetValue("Item.Billeder.Beskrivelse"))</p> @if( img.GetBoolean("Item.Billeder.VisSomKnap") && !string.IsNullOrEmpty( img.GetString("Item.Billeder.Link") ) ) { <text> <a href='@(img.GetValue("Item.Billeder.Link"))' target='@(target)' class="button" title='@(img.GetValue("Item.Billeder.KnapTitel"))'>@(img.GetValue("Item.Billeder.Knaptekst"))</a> </text> } </div> </div> </div> </text> slideIndex++; } </div> @if(Multiple) { @* <text> <!-- Left and right controls --> <a class="left carousel-control" href="#header-carousel" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="right carousel-control" href="#header-carousel" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </text> *@ } </div> </div> </text> } else { <div class="product-top-image"> <img src='@(GetLoop("Item.Billeder")[0].GetValue("Item.Billeder.Billede"))' class="img-responsive" style="width:100%;" /> <div class="headline"> <div class="container"> <div class="row"> <div class="col-xs-12"> <h1>@(GetLoop("Item.Billeder")[0].GetValue("Item.Billeder.Overskrift"))</h1> </div> </div> </div> </div> </div> } } @helper DisplayTextContent() { string align = ""; if( GetBoolean("Item.Centreret") ) { align = "center"; } <text> @{ string backgroundColor="000000"; string sectionBG=""; string arrow = ""; if( !string.IsNullOrEmpty( GetString("Item.Baggrundsfarve") ) ) { sectionBG = "background-color:" + GetString("Item.Baggrundsfarve") + ";"; backgroundColor = GetString("Item.Baggrundsfarve").Replace("#",""); } if( GetBoolean("Item.PilOeverst") ) { arrow = "top-arrow arrow-" + backgroundColor; } string distanceTop = GetString("Item.IndvendigAfstandTop"); string reduceSpaceClass = ""; if (distanceTop == "no-padding-top") { reduceSpaceClass = "removeSpaceTop"; } } <div class='section @(GetValue("Item.IndvendigAfstandTop")) @(GetValue("Item.IndvendigAfstandBund")) @(arrow) color@(backgroundColor) @(reduceSpaceClass)' style='@(sectionBG)'> @if (!string.IsNullOrEmpty(GetString("Item.IndvendigAfstandTop"))) { } @if( !string.IsNullOrEmpty( GetString("Item.Inds_tOverskrift") ) ) { <text> <div class="container"> <div class="row text-content"> <div class="col-xs-12"> <h2 class="subline">@(GetValue("Item.Inds_tOverskrift"))</h2><br/> </div> </div> </div> </text> } <div class="container"> <div class="row"> <div class="col-xs-12"> <div class="text-content @(align)"> @(GetValue("Item.Tekst")) </div> </div> </div> </div> </div> </text> } @helper DisplayTileList() { <text> @{ string backgroundColor="000000"; string sectionBG=""; string arrow = ""; if( !string.IsNullOrEmpty( GetString("Item.Baggrundsfarve") ) ) { sectionBG = "background-color:" + GetString("Item.Baggrundsfarve") + ";"; backgroundColor = GetString("Item.Baggrundsfarve").Replace("#",""); } if( GetBoolean("Item.PilOeverst") ) { arrow = "top-arrow arrow-" + backgroundColor; } string distanceTop = GetString("Item.IndvendigAfstandTop"); string reduceSpaceClass = ""; if (distanceTop == "no-padding-top") { reduceSpaceClass = "removeSpaceTop"; } } <div class='section @(GetValue("Item.IndvendigAfstandTop")) @(GetValue("Item.IndvendigAfstandBund")) @(arrow) color@(backgroundColor) @(reduceSpaceClass)' style='@(sectionBG)'> @if (!string.IsNullOrEmpty(GetString("Item.IndvendigAfstandTop"))) { } @if( !string.IsNullOrEmpty( GetString("Item.Inds_tOverskrift") ) ) { <text> <div class="container"> <div class="row text-content"> <div class="col-xs-12"> <h2 class="subline">@(GetValue("Item.Inds_tOverskrift"))</h2><br/> </div> </div> </div> </text> } <div class="container"> <div class="row"> <div class="col-xs-12"> <div class="grid"> @foreach( var item in GetLoop("Item.Tiles") ) { string link = ""; string classe = ""; if( !string.IsNullOrEmpty(item.GetString("Item.Tiles.TileLink") ) ) { string TileLink = item.GetString("Item.Tiles.TileLink"); classe = "clickable"; if (TileLink.Contains("http")){ link = "location.href='"+TileLink+"';"; } else { link = "location.href='/"+TileLink+"';"; } } <text> <div class='grid-item @(item.GetValue("Item.Tiles.Bredde")) @(item.GetValue("Item.Tiles.H_jde"))'> <div class="overlay"></div> <div onclick="@(link)" class='grid-item-content @(item.GetValue("Item.Tiles.T1BaggrundsbilledePosition")) @(classe)' style='background-color:@(item.GetValue("Item.Tiles.TileBaggrundsfarve"));background-image:url(@(item.GetValue("Item.Tiles.TileBaggrundsbillede")));'> @if( item.GetString("Item.Tiles.TileType").Equals("type1") ) { <text> <div class="grid-center"> <div class="center-text-btn"> <p> @(item.GetValue("Item.Tiles.T1Tekst") ) </p> <a href='@(item.GetValue("Item.Tiles.T1KnapLink"))' class='button @(item.GetValue("Item.Tiles.T1KnapStyle"))'>@(item.GetValue("Item.Tiles.T1KnapTekst"))</a> </div> </div> </text> } else if( item.GetString("Item.Tiles.TileType").Equals("type2") ) { <text> <div class="bottom-text"> <b>@(item.GetValue("Item.Tiles.T2Linje_1"))</b> <b class="last">@(item.GetValue("Item.Tiles.T2Linje_2"))</b> </div> </text> } else { <text> <div class="bottom-text"> <small>@(item.GetValue("Item.Tiles.T3LilleTekst"))</small> <b>@(item.GetValue("Item.Tiles.T3FedTekst"))</b> @if(!string.IsNullOrEmpty( item.GetString("Item.Tiles.T3FedTekstLinje_2") ) ) { <text> <b class="last">@(item.GetValue("Item.Tiles.T3FedTekstLinje_2"))</b> </text> } </div> </text> } </div> </div> </text> } </div> </div> </div> </div> </div> </text> } @helper DisplayTeaserAndText() { <text> @{ string backgroundColor="000000"; string sectionBG=""; string arrow = ""; if( !string.IsNullOrEmpty( GetString("Item.Baggrundsfarve") ) ) { sectionBG = "background-color:" + GetString("Item.Baggrundsfarve") + ";"; backgroundColor = GetString("Item.Baggrundsfarve").Replace("#",""); } if( GetBoolean("Item.PilOeverst") ) { arrow = "top-arrow arrow-" + backgroundColor; } string distanceTop = GetString("Item.IndvendigAfstandTop"); string reduceSpaceClass = ""; if (distanceTop == "no-padding-top") { reduceSpaceClass = "removeSpaceTop"; } } <div class='section @(GetValue("Item.IndvendigAfstandTop")) @(GetValue("Item.IndvendigAfstandBund")) @(arrow) color@(backgroundColor) @(reduceSpaceClass)' style='@(sectionBG)'> @if (!string.IsNullOrEmpty(GetString("Item.IndvendigAfstandTop"))) { } @if( !string.IsNullOrEmpty( GetString("Item.Inds_tOverskrift") ) ) { <text> <div class="container"> <div class="row text-content"> <div class="col-xs-12"> <h2 class="subline">@(GetValue("Item.Inds_tOverskrift"))</h2><br/> </div> </div> </div> </text> } <div class="container"> <div class="row text-content"> @if( GetBoolean("Item.TeaserTilH_jre") ) { <text> <div class="col-md-8"> @(GetValue("Item.Tekst")) </div> <div class="col-md-4"> <h2 class="subline">@(GetValue("Item.Teaser"))</h2> </div> </text> } else { <text> <div class="col-md-4"> <h2 class="subline">@(GetValue("Item.Teaser"))</h2> </div> <div class="col-md-8"> @(GetValue("Item.Tekst")) </div> </text> } </div> </div> </div> </text> } @helper DisplayTextAndImage() { string ImageSize = GetString("Item.Billedebredde"); string TextSize = ""; if( ImageSize.Equals("col-md-3") ) { TextSize = "col-md-9"; } else if( ImageSize.Equals("col-md-6") ) { TextSize = "col-md-6"; } else { TextSize = "col-md-3"; } <text> @{ string backgroundColor="000000"; string sectionBG=""; string arrow = ""; if( !string.IsNullOrEmpty( GetString("Item.Baggrundsfarve") ) ) { sectionBG = "background-color:" + GetString("Item.Baggrundsfarve") + ";"; backgroundColor = GetString("Item.Baggrundsfarve").Replace("#",""); } if( GetBoolean("Item.PilOeverst") ) { arrow = "top-arrow arrow-" + backgroundColor; } string distanceTop = GetString("Item.IndvendigAfstandTop"); string reduceSpaceClass = ""; if (distanceTop == "no-padding-top") { reduceSpaceClass = "removeSpaceTop"; } } <div class='section @(GetValue("Item.IndvendigAfstandTop")) @(GetValue("Item.IndvendigAfstandBund")) @(arrow) color@(backgroundColor) @(reduceSpaceClass)' style='@(sectionBG)'> @if (!string.IsNullOrEmpty(GetString("Item.IndvendigAfstandTop"))) { } @if( !string.IsNullOrEmpty( GetString("Item.Inds_tOverskrift") ) ) { <text> <div class="container"> <div class="row text-content"> <div class="col-xs-12"> <h2 class="subline">@(GetValue("Item.Inds_tOverskrift"))</h2><br/> </div> </div> </div> </text> } <div class="container"> <div class="row text-content"> @if( GetBoolean("Item.H_jrestilBillede") ) { <text> <div class="@(TextSize)"> <text> <h2 class="subline">@(GetValue("Item.Overskrift"))</h2> @(GetValue("Item.Tekst")) </text> </div> <div class="@(ImageSize)"> <text> <img src='@(GetValue("Item.Billede"))' class="img-responsive" /> </text> </div> </text> } else { <text> <div class="@(ImageSize)"> <text> <img src='@(GetValue("Item.Billede"))' class="img-responsive" /> </text> </div> <div class="@(TextSize)"> <text> <h2 class="subline">@(GetValue("Item.Overskrift"))</h2> @(GetValue("Item.Tekst")) </text> </div> </text> } </div> </div> </div> </text> } @helper DisplayTextContact() { <text> @{ string backgroundColor="000000"; string sectionBG=""; string arrow = ""; if( !string.IsNullOrEmpty( GetString("Item.Baggrundsfarve") ) ) { sectionBG = "background-color:" + GetString("Item.Baggrundsfarve") + ";"; backgroundColor = GetString("Item.Baggrundsfarve").Replace("#",""); } if( GetBoolean("Item.PilOeverst") ) { arrow = "top-arrow arrow-" + backgroundColor; } string distanceTop = GetString("Item.IndvendigAfstandTop"); string reduceSpaceClass = ""; if (distanceTop == "no-padding-top") { reduceSpaceClass = "removeSpaceTop"; } } <div class='section @(GetValue("Item.IndvendigAfstandTop")) @(GetValue("Item.IndvendigAfstandBund")) @(arrow) color@(backgroundColor) @(reduceSpaceClass)' style='@(sectionBG)'> @if (!string.IsNullOrEmpty(GetString("Item.IndvendigAfstandTop"))) { } @if( !string.IsNullOrEmpty( GetString("Item.Inds_tOverskrift") ) ) { <text> <div class="container"> <div class="row text-content"> <div class="col-xs-12"> <h2 class="subline">@(GetValue("Item.Inds_tOverskrift"))</h2><br/> </div> </div> </div> </text> } <div class="container"> <div class="row text-content"> <div class="col-md-3"> <h2 class="subline bot-cont">@(GetValue("Item.Overskrift"))</h2> <p>@(GetValue("Item.Tekst"))</p> </div> <div class="col-md-9"> <div class="contacts"> <div class="row"> @foreach( var c in GetLoop("Item.Kontaktpersoner") ) { <div class="col-xs-6 col-md-3 contact"> <div class="image"> <img src='/Admin/Public/GetImage.ashx?Image=@(c.GetValue("Item.Kontaktpersoner.Billede"))&Format=jpg&Width=532&Height=532&Compression=99' class="img-responsive" /> </div> <div class="info"> <span class="name">@(c.GetValue("Item.Kontaktpersoner.Navn") )</span><br/> <span class="department infoe">@(c.GetValue("Item.Kontaktpersoner.Stilling") )</span><br/><br/> <div class="bottomInfo"> <span class="phone infoe"><a href='tel:@(c.GetValue("Item.Kontaktpersoner.Telefon") )'> @(c.GetValue("Item.Kontaktpersoner.Telefon") )</a></span><br/> <span class="email infoe"><a href='mailto:@(c.GetValue("Item.Kontaktpersoner.Email") )'>@(c.GetValue("Item.Kontaktpersoner.Email") )</a></span> </div> </div> </div> } </div> </div> </div> </div> </div> </div> </text> } @helper DisplayProductList() { <div class="product-list"> @{ int ind = 1; } @foreach(var p in GetLoop("Item.Produktliste") ) { string add = ""; if( ind % 2 == 0 ) { add = "col-md-push-8 uneven"; } <div class="product" style="background-image:url(@(p.GetValue("Item.Produktliste.Billede")));" onclick='location.href="@(p.GetValue("Item.Produktliste.Url"))";'> <div class="container-fluid section"> <div class="row"> <div class="col-md-4 @(add) text-content overlay"> <a href="@(p.GetValue("Item.Produktliste.Url"))" style="width:0px;height:0px;position:absolute;left:-100000px;"></a> <div class="inner"> <h2 class="subline bot-cont">@(p.GetValue("Item.Produktliste.Navn"))</h2> <p> @(p.GetValue("Item.Produktliste.Tease")) </p> </div> </div> </div> </div> </div> ind++; } </div> } @helper DisplayReferenceList() { List<string> ProjectTypes = new List<string>(); List<string> Locations = new List<string>(); foreach( var p in GetLoop("Item.Referencer") ) { if( !ProjectTypes.Contains( p.GetString("Item.Referencer.Projekttype") ) ) { ProjectTypes.Add( p.GetString("Item.Referencer.Projekttype") ); } if( !Locations.Contains( p.GetString("Item.Referencer.Landsdel") ) ) { Locations.Add( p.GetString("Item.Referencer.Landsdel") ); } } <text> <div class="container section reference-list double-padding-top double-padding-bottom"> <div class="row"> <div class="col-md-4 column-filters"> <div class="filters text-content"> <div class="display-format"> <input type="button" value='@(Translate("filter_listview","Liste"))' data-show="classic" class="filter-button active" /><input type="button" value='@(Translate("filter_mapview","Kort"))' data-show="display-map" class="filter-button" /> </div> <div class="display-when-list"> <div class="hi-con-form"> <div class="project-type"> <h2 class="subline bot-cont">@(Translate("project_type_filter","Type projekt"))</h2> @{ int index = 0; } @foreach( var t in ProjectTypes ) { <text> <p> <input type="checkbox" value="@(t)" class="project-type-check" id='filter-@(index)'> <label for='filter-@(index)'>@(Translate("project_type_" + t, t))</label> </p> </text> index++; } </div> <div class="input-search"> <input type="text" name="search" id="search" placeholder="@(Translate("project_search","Vælg land"))"><button class="search-button" name="search-btn" id="search-btn"><span class="glyphicon glyphicon-search"></span></button> </div> <div class="location-select"> <div class="select"> <select name="slct" id="slct"> <option value="">@(Translate("filter_select_region","Vælg land"))</option> @foreach(var l in Locations ) { <text> <option value='@(l)'>@(l)</option> </text> } </select> </div> </div> </div> </div> <div class="display-when-map"> <div class="project-type"> <h2 class="subline bot-cont">@(Translate("project","Projekt"))</h2> <div class="project-pre-text"> <p>@(Translate("select_project_text","Vælg et projekt på kortet for at se udvidede detaljer"))</p> </div> <div class="project-details"> <h2 class="project-title"></h2> <img class="project-image img-responsive" /> <div class="project-location"> <i class="glyphicon glyphicon-map-marker"></i> <span class="location"></span> </div> <p class="project-text"></p> <a class="project-link">Se projekt</a> </div> </div> </div> </div> </div> <div class="col-md-8 references classic"> <div class="row"> @foreach( var r in GetLoop("Item.Referencer") ) { <text> <div class="col-md-6 reference" data-type='@(r.GetValue("Item.Referencer.Projekttype"))' data-location='@(r.GetValue("Item.Referencer.Landsdel"))' data-teaser='@(r.GetString("Item.Referencer.Projektnavn").ToLower())'> <div class="reference-inner"> <div class="image"> <a href='@(r.GetValue("Item.Referencer.Url"))'> <div class="overlay"></div> <img src='/Admin/Public/GetImage.ashx?Image=@(r.GetValue("Item.Referencer.Listebillede"))&Format=jpg&Width=720&Height=532&Compression=99' class="img-responsive" /> </a> </div> <div class="star" data-referenceID='@(r.GetValue("Item.Referencer.Id"))' data-name='@(r.GetValue("Item.Referencer.Projektnavn"))' data-image='@(r.GetValue("Item.Referencer.Listebillede"))' data-url='@(r.GetValue("Item.Referencer.Url"))' data-teaser='@(r.GetString("Item.Referencer.ListeTeaser"))'> <i class="glyphicon glyphicon-star-empty"></i> </div> <div class="text"> <span class="location">@(r.GetValue("Item.Referencer.By"))</span><br/> <b>@(r.GetValue("Item.Referencer.Projektnavn"))</b> </div> </div> </div> </text> } </div> </div> <div class="col-md-8 map display-map"> <div id="map"></div> </div> </div> </div> <script type="text/javascript"> var map; function initMap() { map = new google.maps.Map(document.getElementById('map'), { center: {lat: 56.288727, lng: 9.481201}, zoom: 5 }); @foreach(var re in GetLoop("Item.Referencer") ) { if (!string.IsNullOrEmpty(re.GetString("Item.Referencer.Breddegrad"))) { <text> var marker = new google.maps.Marker({ position: new google.maps.LatLng(@(re.GetValue("Item.Referencer.Breddegrad")),@(re.GetValue("Item.Referencer.L_ngdegrad"))), title:"@(re.GetValue("Item.Referencer.Projektnavn"))", visible: true, icon: '/Files/Templates/Designs/HiCon2016/assets/img/map-pin.png' }); marker.addListener('click', function() { $('.display-when-map').addClass('active-project'); $('.display-when-map .project-title').text("@(re.GetValue("Item.Referencer.Projektnavn"))"); $('.display-when-map .project-image').attr('src',"@(re.GetValue("Item.Referencer.Listebillede"))"); $('.display-when-map .project-location .location').text("@(re.GetValue("Item.Referencer.By"))"); $('.display-when-map .project-text').text("@(re.GetString("Item.Referencer.ListeTeaser").Replace("\n","<br>").Replace("\r","<br>"))"); $('.display-when-map .project-link').attr('href',"@(re.GetValue("Item.Referencer.Url"))"); }); marker.setMap(map); </text> } } } </script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBLbqdq2BkthW6f_66POZ5fUZMlJ2vnIec&callback=initMap" async defer></script> </text> @SnippetStart("javascripts") <script type="text/javascript"> </script> @SnippetEnd("javascripts") } @helper DisplayChildboxes() { <div class="section child double-padding-bottom arrow-ffffff colorffffff bg-fff"> <div class="container"> <div class="row"> <div class="col-xs-12"> <div class="text-content center"> <h2>@(GetValue("Item.Overskrift"))</h2> @(GetValue("ParagraphModule")) <h3>@(GetValue("Item.Undertitel"))</h3> </div> </div> </div> </div> </div> } @switch( item ) { // Header item type. Displaying either single image or full BS slider case "Header": @DisplayHeader() break; case "Tekstindhold": @DisplayTextContent() break; case "Tilelist": @DisplayTileList() break; case "TekstOgTeaser": @DisplayTeaserAndText() break; case "BilledeOgTekst": @DisplayTextAndImage() break; case "KontakterOgTekst": @DisplayTextContact() break; case "Produktliste": @DisplayProductList() break; case "Referenceliste": @DisplayReferenceList() break; case "ChildBanner": @DisplayChildboxes() break; default: @GetValue("ParagraphText") @GetValue("ParagraphModule") break; }

CRC i2® application cases - JointCast

 

 


Staircase at Copenhagen Plant Science Center - Created using CRC JointCast®

 

In his most recent post, CRC JointCast - Joints that are small, strong and simple, Bendt Aarup presented the origin and the idea behind JointCast – Hi-Cons special ‘super glue’ for on-site merging of elements into monolithic structures.

 

In this post I’ll use a few application cases to explain some of the challenges and considerations one need to be aware of to use the JointCast material successfully on a project level.

 

Bendt already mentioned two examples, the Catharina brugge in Leiden and the staircase at Per Aarsleff.

 

They are good examples of both the benefits and challenges encountered when using JointCast, and on the creativity needed to reach a good result, of course structurally, but perhaps even more importantly, for installation and aesthetics.

 

In both cases the main reason for using JointCast is the sheer size of the final structure. Since CRC i2® cannot be cast on site, element handling and transport is limiting to the sizes of individual elements. This is then compensated for by using JointCast to merge the elements to structurally perform as if they had been one monolithic piece. This is THE main benefit of JointCast.

 


The rough gross size and weight of the two structures is app. 4 x 4 x 19 meters and 30 tons for the Per Aarsleff staircase and 36 x 11 x 1,5 meters and 150 tons for the Catharina bridge deck, making one-piece casting and transport inconceivable, both economically and practically.

 


Installation process of the Catharina bridge showing the elements being aligned (l), fixed for casting (r. top) and after casting the Joints (r. bottom). Images by the contractor Gebr. Schouls B.V.

 


Installation process of the Per Aarsleff staircase showing the elements after alignment, scaffolding and JointCasting (l) and one of the joints after striking the scaffolding (r).

 

The challenges, also encountered in the above mentioned projects are:

  • Aesthetics – colour and texture difference between the JointCast and “normal” CRC i2®
  • Tolerances in the Joints – Structurally as well as handling them in an aesthetically acceptable way
  • Curing time required – temperature dependant
  • Execution – difficult to cast and a very critical part of the structural integrity
  • Scaffolding – often complex shapes of the Joints

 

It was commented to Bendt’s blog post that a limitation for the use of Jointcast is that the use must be taken into consideration at an early stage in the design phase - and this is very true due to the list of issues above, and one of the reasons why mainly Hi-Con uses the material for our own elements.

 

So how to handle the challenges?

 

Several challenges are related to the same task: Casting the joint.

 

When joining two elements with normal installation tolerances there will be dis-alignment. The width of the Joint to some extent makes this easier to smoothen visually, but it will never be a perfect shape, just as in-situ formwork may shift and cause small deviations from intended shape.

 

To minimise the effort needed to finish the joints, the JointCast section is often cast 5 mm short of being flush with the adjacent elements. This allows a painter to use a repair putty, grout or similar, to shape the transition between the elements without the necessity to grind excess JointCast material away – which would take a long time...

 

The scaffolding is typically tailor-made to each joint and ordered together with the formwork parts, and when above approach to finishing is used, the scaffolding is attached by self-cutting screws drilled directly into the edges of the adjacent elements.

 

This of course means that the entire surface must be sanded down and painted to cover up holes, patches of repair material, polished sections etc. This is most often the selected option to handle the aesthetic issue – as was the case for the Parapet of the Per Aarsleff staircase. The steps are not connected with JointCast, and consequently the top surface is the plain smooth-cast soap-washed CRC i2® surface.

 

An alternative approach is to use the elements themselves to hide the JointCast as much as possible.

 

This was the case at the Catharina Brugge, where an elongated part of the edge profile “shell” was used as permanent formwork for the Jointcast in the structural cross section of the bridge profile.

 

This “shell” solution was originally developed for another staircase, the Copenhagen Plant Science Center. In this case the JointCast was poured from above through a 5 cm slit, and could be inspected from below after casting to ensure that the joints had been successfully filled. Below a video showing the entire stair underside, with both completed joints after striking the scaffolding and joints with scaffolding still in place.

 

 

 

 


Copenhagen Plant Science Center Joint after striking the scaffolding, underside showing the actual size of the joint (l) and the edge (“shell”) detail on the top side with the 5 cm slit allowing filling of the joint (r).

 

In this case, the underside was not painted, but a render added to create a uniform texture – but to obtain the same colour, a semi-transparent silicate paint was added. This made it possible to retain a lot of the raw concrete “feel” to the staircase, while softening the variation in colour – before and after images are shown below.

 


Copenhagen Plant Science Center staircase underside after completed on-site rendering of Joints and lifting sockets (top) and after completed treatment with colour adjusted semi-transparent silicate based paint (bottom)

 

The same approach was used at the Catharina Brugge, except for the Joint being open to the top, allowing inspection to be made during the on-going casting of the joint. In this case a coloured screed was added for architectural reasons, covering the rough upper surface of both elements and JointCast.

 

 At Hi-Cons main office expansion, the complex columns have been created using JointCast as well, to avoid very expensive formwork. In this case the lasing option will also be used to cover the difference in colour – to such a degree that we have cast the Joints in light-coloured JointCast – just to make a point of it!

 

 

 

 


Column Joint after striking the scaffolding at the side – Jointcast in contrasting colour.

 

I’ll report more from the expansion later, and will include an update after we have added the semi-transparent paint to the JointCast columns.

 

In addition to the structural and aesthetic issues in the final stage, the timescale also need to be considered. The JointCast builds up strength very quickly in warm weather, and there have been examples of a structure being put into use just 2 days after the JointCast was poured.

 

But the material is quite temperature sensitive, and in cold weather temporary supports may have to be kept in place for several weeks, while the temperature on site is registered and used to calculate the on-going accumulated maturity.

 

All the above aspects, from designing the element geometry, divisions and reinforcement, the casting and making good of the joints, final surface expression to the execution timetable must be considered in the project preparation phase. This is typically an iterative process between client, advisors, contractor and Hi-Con, and ends up in a formulated and agreed plan of execution, normally even before an order for the structure is placed.

 

But don’t let that scare you – at Hi-Con we have more than 15 years of experience in using the material, and will guide you through the process, so keep challenging us: If you can imagine it we will find an innovative way to realize it to an impressive result!

 

 


Catharina brugge, Leiden by night. Foto Gerda van Ekris.

 

 

Thank you for reading! Visit our Wordpress Blog to comment on the post.