Exception in template (eCom/Product/NyboProduct.cshtml): System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.Substring(Int32 startIndex, Int32 length)
at CompiledRazorTemplates.Dynamic.cbababbafacdcce.Execute()
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context)
at RazorEngine.Razor.Parse[T](String razorTemplate, T model, String cacheName)
at Dynamicweb.Rendering.Template.Output()
@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
@using System;
@using System.Web;
@{
var additionalImages = GetString("Ecom:Product:Field.AdditionalImages").Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
<!-- POPUP primaryimage -->
<div class="modal fade productimagelarge" id="imagezoommodal" tabindex="-1" role="dialog" aria-labelledby="Image Zoom" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
</div>
<div class="modal-body">
<img src="" id="imagepreview">
</div>
</div>
</div>
</div>
<div class="container">
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 visual">
<div id="primary-image">
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.ExpiryDate.Value")))
{
var expiryDate = GetDate("Ecom:Product:Field.ExpiryDate.Value");
if (expiryDate.Year != 2999)
{
<div class="optional-label_list">
@Translate("ExpireDateName", "Udgår d.")
@expiryDate.ToShortDateString()
</div>
}
else
{
<div class="optional-label_list" style="margin-top: 5px;background: none;">
</div>
}
}
else
{
<div class="optional-label" style=" background: none;">
</div>
}
@if (string.IsNullOrEmpty(GetString("Ecom:Product:Field.Image1.Value.Clean")))
{
<img src="/admin/public/getimage.aspx?Image=/files/billeder/na.jpg&Format=jpg&size=500x500"
alt=""
class="img-responsive"
id="imageresource"
data-image="/admin/public/getimage.aspx?Image=/files/billeder/na.jpg&Format=jpg&size=500x500" />
}
else
{
<img src='https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=500x500&format=jpg'
data-zoom-image='https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=650x650&format=jpg'
data-image='https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=700x700&format=jpg'
alt='@GetString("Ecom:Product.Name")'
class="img-responsive"
id="imageresource" />
}
</div>
<div class="thumb-area">
<div class="thumbnail-images">
@{
List<string> images = new List<string>();
}
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.Image1")))
{
images.Add(GetString("Ecom:Product:Field.Image1"));
<div class="image-thumbnail">
<img src="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=500x500&format=jpg"
data-image="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=650x650&format=jpg"
data-imagezoom="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=700x700&format=jpg"
alt='@GetString("Ecom:Product.Name")' />
</div>
}
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.Image2")))
{
images.Add(GetString("Ecom:Product:Field.Image2"));
<div class="image-thumbnail">
<img src="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image2.Value.Clean")&fit=fit&size=500x500&format=jpg"
data-image="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image2.Value.Clean")&fit=fit&size=650x650&format=jpg"
data-imagezoom="https://cdn.nybo.com/Perfion/Image.aspx?id=@GetString("Ecom:Product:Field.Image2.Value.Clean")&fit=fit&size=700x700&format=jpg"
alt='@GetString("Ecom:Product.Name")' />
</div>
}
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.AdditionalImages")))
{
foreach (var image in additionalImages)
{
images.Add(image);
<div class="image-thumbnail">
<img src="https://cdn.nybo.com/Perfion/Image.aspx?id=@image&fit=fit&size=500x500&format=jpg"
data-image="https://cdn.nybo.com/Perfion/Image.aspx?id=@image&fit=fit&size=650x650&format=jpg"
data-imagezoom="https://cdn.nybo.com/Perfion/Image.aspx?id=@image&fit=fit&size=700x700&format=jpg"
alt='@GetString("Ecom:Product.Name")' />
</div>
}
}
@if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.ModelLibrary")))
{
foreach (var item in GetString("Ecom:Product:Field.ModelLibrary").Split(','))
{
if (!images.Contains(item))
{
images.Add(item);
<div class="image-thumbnail">
<img src="https://cdn.nybo.com/Perfion/Image.aspx?id=@item&fit=fit&size=500x500&format=jpg"
data-image="https://cdn.nybo.com/Perfion/Image.aspx?id=@item&fit=fit&size=650x650&format=jpg"
data-imagezoom="https://cdn.nybo.com/Perfion/Image.aspx?id=@item&fit=fit&size=700x700&format=jpg"
alt='@GetString("Ecom:Product.Name")'
class="img-responsive" />
</div>
}
}
}
</div>
</div>
@if (!string.IsNullOrEmpty(GetString("Ecom:Product.ColorsFound")))
{
<div class="quickview farver-rollover">
<h3>
@Translate("Color", "Farver", true)
</h3>
@foreach (var color in GetLoop("Ecom:Product.Color"))
{
<a href="javascript:void(0);">
<span style='background: #@color.GetString("Ecom:Product.Color");'>
</span>
</a>
}
</div>
}
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.VideoLink")))
{
<div id="video" class="video">
<h5>
<i class="fa fa-youtube-play fa-2x"></i> @Translate("SeVideo", "Se produkt video")
</h5>
</div>
<!-- POPUP -->
<div id="popup">
<div class=" vimeocontent">
<div class="closed"><p>x</p></div>
<iframe src="https://player.vimeo.com/video/@GetString("Ecom:Product:Field.VideoLink")?color=ffffff&title=0&byline=0&portrait=0" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
</div>
</div>
<div id="bgpopup">
</div>
}
</div>
<div class="col-xs-12 col-sm-8 col-md-8 col-lg-8 description">
<div id="tabs" class="nav nav-tabs" role="tablist">
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tabs-1">
<h1>
@GetString("Ecom:Product.Name")
</h1>
<div class="scroll-pane">
<div class="scontainer">
<div class="produc-description">
<p>
@GetString("Ecom:Product.ShortDescription")
</p>
@if (!string.IsNullOrEmpty(GetString("Custom:Collection.Description")))
{
<p>
@GetString("Custom:Collection.Description")
</p>
}
</div>
@if (!string.IsNullOrEmpty(GetString("Custom:Collection.ID")))
{
<div class="lables">
@Translate("Collection", "Kollektion", true) :
</div>
<div class="dlinks">
@GetString("Custom:Collection.Name")
</div>
}
@if (!string.IsNullOrEmpty(GetString("Custom:Collection.TargetGroup.Name")))
{
<div class="lables">
@Translate("Audiences", "Målgruppe", true) :
</div>
<div class="dlinks">
@GetString("Custom:Collection.TargetGroup.Name")
</div>
}
<div class="lables">
@Translate("Quality", "Kvalitet", true) :
</div>
<div class="dlinks">
@GetString("Ecom:Product:Field.Ecom:Product.Quality.Value.Clean")
</div>
<div class="lables">
@Translate("Farvetekst", "Farvetekst", true)
:
</div>
<div class="dlinks">
@GetString("Ecom:Product:Field.Ecom:Product.Color.Value.Clean")
</div>
<div class="lables">@Translate("BestillingsNr", "BestillingsNr", true):</div>
<div class="dlinks" name="bestnr">
@*GetString("Ecom:Product.Number").Substring(0, 9)-@GetString("Ecom:Product.Number").Substring(9, 2)*@
@GetString("Ecom:Product.Number").Substring(0, 7)-@GetString("Ecom:Product.Number").Substring(7, 4)
</div>
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.SizesStock.Value.Clean")))
{
<div class="lables">@Translate("SizesStock", "Lagerstørrelser", true):</div>
<div class="dlinks" name="SizesStock">
@GetString("Ecom:Product:Field.SizesStock.Value.Clean")
</div>
}
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.SizesToOrder.Value.Clean")))
{
<div class="lables">@Translate("SizesToOrder", "Bestillingsstørrelser", true):</div>
<div class="dlinks" name="SizesToOrder">
@GetString("Ecom:Product:Field.SizesToOrder.Value.Clean")
</div>
}
@if (!string.IsNullOrEmpty(GetString("Custom:Collection.Collection.Name")))
{
<div class="lables">
@Translate("Seriebeskrivelse", "Seriebeskrivelse", true)
:
</div>
<div class="dlinks">
@GetString("Custom:Collection.Collection.Name")
</div>
}
<div class="lables">
@Translate("Datasheet", "Produktark", true) :
</div>
<div class="dlinks">
@if (!string.IsNullOrEmpty(GetString("Ecom:Product:Field.ProductSheet.Value.Clean")))
{
if (GetGlobalValue("Global:Area.Lang") == "da")
{
<a href='https://cdn.nybo.com/Perfion/File.aspx?id=@GetString("Ecom:Product:Field.ProductSheet.Value.Clean")' title="Vis produkt i PDF" target="_blank">Vis i PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "en")
{
<a href="https://cdn.nybo.com/Perfion/File.aspx?id=@GetString("Ecom:Product:Field.ProductSheet.Value.Clean")" title="Show product in PDF" target="_blank">PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "de")
{
<a href="https://cdn.nybo.com/Perfion/File.aspx?id=@GetString("Ecom:Product:Field.ProductSheet.Value.Clean")" title="Zum Produkt im PDF" target="_blank">PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "sv")
{
<a href="https://cdn.nybo.com/Perfion/File.aspx?id=@GetString("Ecom:Product:Field.ProductSheet.Value.Clean")" title="Vis produkt i PDF" target="_blank">Vis i PDF <i class="fa fa-file-pdf-o"></i></a>
}
}
else
{
if (GetGlobalValue("Global:Area.Lang") == "da")
{
<a href='/report.aspx?q=normal&id=@GetString("Ecom:Product:Field.PerfionID")&reportname=ProductSheet_DA' title="Vis produkt i PDF" target="_blank">Vis i PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "en")
{
<a href="/report.aspx?q=normal&id=@GetString("Ecom:Product:Field.PerfionID")&reportname=ProductSheet_EN&language=en" title="Show product in PDF" target="_blank">PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "de")
{
<a href="/report.aspx?q=normal&id=@GetString("Ecom:Product:Field.PerfionID")&reportname=ProductSheet_DE&language=de" title="Zum Produkt im PDF" target="_blank">PDF <i class="fa fa-file-pdf-o"></i></a>
}
else if (GetGlobalValue("Global:Area.Lang") == "sv")
{
<a href="/report.aspx?q=normal&id=@GetString("Ecom:Product:Field.PerfionID")&reportname=ProductSheet_SE&language=sve" title="Vis produkt i PDF" target="_blank">Vis i PDF <i class="fa fa-file-pdf-o"></i></a>
}
}
</div>
<p>
@GetString("Ecom:Product:Field.Logos.Value.Clean")
</p>
<div class="variants" style="clear: both;">
<h3>
@Translate("Color", "Farver", true)
</h3>
@foreach (var colorVariant in GetLoop("Custom:ColorVariants"))
{
if (!string.IsNullOrEmpty(colorVariant.GetString("Ecom:Product:Field.Image1.Value.Clean")))
{
<a class="variant" style="display: inline-block; width: 66px; height: 66px; margin-top: 10px;"
href='/default.aspx?ID=@GetGlobalValue("Global:Page.ID")&ProductID=@colorVariant.GetString("Ecom:Product.ID")&GroupID=@colorVariant.GetString("Ecom:Product:Field.ProductSegmentID.Value")'
title='@colorVariant.GetString("Ecom:Product:Field.Ecom:Product.Color.Value.Clean") @colorVariant.GetString("Ecom:Product.Name")'>
<img src='https://cdn.nybo.com/Perfion/Image.aspx?id=@colorVariant.GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=66x66&format=png'
alt='@colorVariant.GetString("Ecom:Product:Field.Ecom:Product.Color.Value.Clean") @colorVariant.GetString("Ecom:Product.Name")' />
</a>
}
}
</div>
@if (GetGlobalValue("Global:Area.Lang") == "da")
{
<div class="goto-collection" style="float: right;"><a href="mailto:info@nybo.com">@Translate("Contact", "Kontakt Nybo", true)</a></div>
<div class="goto-collection" style="float: right;"><a href="/da-dk/kontakt/find-forhandler-1.aspx">@Translate("Dealerlist", "Gå til forhandlerliste", true)</a></div>
}
else if (GetGlobalValue("Global:Area.Lang") == "en")
{
<div class="goto-collection" style="float: right;"><a href="mailto:info@nybo.com">@Translate("Contact", "Kontakt Nybo", true)</a></div>
<div class="goto-collection" style="float: right;"><a href="/en-gb/contact/find-dealer-1.aspx">@Translate("Dealerlist", "Gå til forhandlerliste", true)</a></div>
}
else if (GetGlobalValue("Global:Area.Lang") == "de")
{
<div class="goto-collection" style="float: right;"><a href="mailto:verkauf@nybo.com">@Translate("Contact", "Kontakt Nybo", true)</a></div>
<div class="goto-collection" style="float: right;"><a href="/de-de/kontakt/händler-finden-1.aspx">@Translate("Dealerlist", "Gå til forhandlerliste", true)</a></div>
}
else if (GetGlobalValue("Global:Area.Lang") == "sv")
{
<div class="goto-collection" style="float: right;"><a href="mailto:info@nybo.com">@Translate("Contact", "Kontakt Nybo", true)</a></div>
<div class="goto-collection" style="float: right;"><a href="/sv-se/kontakt/hitta-återförsäljare-1.aspx">@Translate("Dealerlist", "Gå til forhandlerliste", true)</a></div>
}
</div>
</div>
</div>
</div>
</div>
</div>
<!--End of Product catalog-->
@{
List<string> relatedItems = null;
var pageView = Dynamicweb.Frontend.PageView.Current() ?? Dynamicweb.Frontend.PageView.GetPageview();
var area = Dynamicweb.Content.Area.GetAreaById(pageView.AreaID);
string langId = area.EcomLanguageID;
if (!string.IsNullOrWhiteSpace(GetString("Ecom:Product:Field.RelatedItems")))
{
relatedItems = GetString("Ecom:Product:Field.RelatedItems").Split(',').ToList();
}
// If empty we have to look on the danish product for default value
else if (langId != "LANG1")
{
var danishProduct = Dynamicweb.eCommerce.Products.Product.GetProductByID(GetString("Ecom:Product.ID"), null, "LANG1");
if (danishProduct != null)
{
var danishRelatedItems = danishProduct.GetProductFieldValue("RelatedItems").ToString();
if (!string.IsNullOrWhiteSpace(danishRelatedItems))
{
relatedItems = danishRelatedItems.Split(',').ToList();
}
}
}
if (relatedItems != null
&& relatedItems.Count > 0)
{
<div class="container-fluid">
<div class="bottomrow" id="related-items-slider">
<div class="tripplew">
<div class="tripplew-header">
<h1>
@Translate("RelatedProducts", "Related Products: ", true)
</h1>
</div>
<ul id="related-items-carousel">
@foreach (var productId in relatedItems.Where(x => x.Trim().Length >= 11))
{
var product = Dynamicweb.eCommerce.Products.Product.GetProductByNumber(productId.Trim().Substring(0, 11));
if (product != null)
{
<li>
@if (!string.IsNullOrEmpty(product.GetProductFieldValue("ExpiryDate").ToString()))
{
if (product.GetProductFieldValue("ExpiryDate").ToString() != "2999")
{
@*<div class="optional-label_carousel">
@Translate("ExpireDateName", "Udgår d.", true)
@product.GetProductFieldValue("ExpiryDate").ToString()
</div>*@
<div class="optional-label_carousel" style="background: none;">
</div>
}
else
{
<div class="optional-label_carousel" style="background: none;">
</div>
}
}
else
{
<div class="optional-label_carousel" style="background: none;">
</div>
}
<a href='/default.aspx?ID=@GetGlobalValue("Global:Page.ID")&ProductID=@product.ID&GroupID=@product.GetProductFieldValue("ProductSegmentID")'>
@if (!string.IsNullOrEmpty(product.GetProductFieldValue("Image1").ToString()))
{
<img src='https://cdn.nybo.com/Perfion/Image.aspx?id=@product.GetProductFieldValue("Image1").ToString()&fit=fit&size=120x166&format=png' alt='@product.Name' />
}
else
{
<img src="/admin/public/getimage.aspx?Image=/files/billeder/na.jpg&Format=jpg&Height=166" alt="" />
}
</a>
</li>
}
}
</ul>
</div>
</div>
</div>
}
}
<div class="container-fluid">
<div class="bottomrow" id="collection-slider">
<div class="tripplew">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="tripplew-header">
<h1>
@Translate("ViewEntireCollection", "Se hele kollektionen", true) :
@GetString("Custom:Collection.Name")
</h1>
<div class="goto-collection">
<a href='Default.aspx?ID=@GetString("Ecom:Product:Page.ID")&GroupID=@GetString("Custom:Collection.ID")'>
@Translate("GoToPage", "Gå til kollektionssiden", true)
</a>
</div>
</div>
<ul id="mycarousel">
@foreach (var collection in GetLoop("Custom:Collections"))
{
<li>
@if (!string.IsNullOrEmpty(collection.GetString("Ecom:Product:Field.ExpiryDate.Value")))
{
if (collection.GetString("Ecom:Product:Field.ExpiryDate.Value") != "2999")
{
@*<div class="optional-label_carousel">
@Translate("ExpireDateName", "Udgår d.", true)
@collection.GetString("Ecom:Product:Field.ExpiryDate.Value")
</div>*@
<div class="optional-label_carousel" style="background: none;">
</div>
}
else
{
<div class="optional-label_carousel" style="background: none;">
</div>
}
}
else
{
<div class="optional-label_carousel" style="background: none;">
</div>
}
<a href='/default.aspx?ID=@GetGlobalValue("Global:Page.ID")&ProductID=@collection.GetString("Ecom:Product.ID")&GroupID=@collection.GetString("Ecom:Product:Field.ProductSegmentID.Value")'>
@if (!string.IsNullOrEmpty(collection.GetString("Ecom:Product:Field.Image1.Value.Clean")))
{
<img src='https://cdn.nybo.com/Perfion/Image.aspx?id=@collection.GetString("Ecom:Product:Field.Image1.Value.Clean")&fit=fit&size=120x166&format=png'
alt='@collection.GetString("Ecom:Product.Name")' />
}
else
{
<img src="/admin/public/getimage.aspx?Image=/files/billeder/na.jpg&Format=jpg&Height=166"
alt="" />
}
</a>
</li>
}
</ul>
</div>
</div>
</div>
</div>
</div>