T-TIME® T-shirt
No. 0510
kr 121,00 (kr 121,00 exkl. moms)
Klassisk rundringad T-shirt med fyra-lagers ribbstickning i halsen och nack- och axelband. Håller formen tvätt efter tvätt.
Error executing template "Designs/identity_v2/ecom/product/partials/add-to-cart.cshtml" System.ArgumentException: An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) at Co3.ID.Dw.Models.Frontend.Ecommerce.IdentityProduct.get_ImagePrimary() at CompiledRazorTemplates.Dynamic.RazorEngine_25bb4d48a66c46dba1895812c9f7a8c5.<>c__DisplayClass0_0.<VariantOption>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\ecom\product\partials\add-to-cart.cshtml:line 193 at CompiledRazorTemplates.Dynamic.RazorEngine_25bb4d48a66c46dba1895812c9f7a8c5.Execute() in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\ecom\product\partials\add-to-cart.cshtml:line 126 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 @inherits ViewModelTemplate<Co3.ID.Dw.Models.Frontend.Ecommerce.IdentityProduct> 2 @using Co3.Espresso.Base.Extensions 3 @using Co3.Espresso.Website.Models.FrontEnd.Ecommerce 4 @using Co3.Espresso.Website.Models.FrontEnd.Settings 5 @using Co3.ID.Dw.Helpers 6 @using Co3.ID.Dw.Models.Frontend.Ecommerce 7 @using Dynamicweb.Ecommerce.Common 8 @using Dynamicweb.Ecommerce.Variants 9 @using Dynamicweb.Ecommerce.Products 10 @using Dynamicweb.Frontend 11 @using Dynamicweb.Rendering 12 @using Dynamicweb.Security.UserManagement 13 @using ProductService = Co3.ID.Dw.Services.ProductService 14 @using System.Web 15 16 @{ 17 var shopContext = SiteContext.CurrentSiteContext(); 18 string alternativeAction = string.IsNullOrEmpty(PageView.Current().Area.Item["EcommerceAlternativeCallToAction"]?.ToString()) == false ? PageView.Current().Area.Item["EcommerceAlternativeCallToAction"].ToString() : string.Empty; 19 20 21 } 22 23 24 25 <form action="/system/data/cart" class="e-product-form js-e-product-form js-e-product-form-addtocart pb-1" method="post"> 26 <input name="CartCmd" type="hidden" value="Add"> 27 <input name="ProductID" type="hidden" value="@Model.Id"> 28 <input name="VariantID" type="hidden" value="@Model.VariantId"> 29 <input name="Quantity" type="hidden" value="1"> 30 <input name="Redirect" type="hidden" value=""> 31 <input name="Name" type="hidden" value="@Model.Name"> 32 <input name="Number" type="hidden" value="@Model.Number"> 33 <input name="Price" type="hidden" value="@Model.Price.Value.ToJavaScript()"> 34 <input name="CurrencyCode" type="hidden" value="@Model.Price.CurrencyCode"> 35 36 37 @if (Model.VariantGroups.Any()) 38 { 39 <div class=""> 40 @foreach (KeyValuePair<string, EspressoVariantGroup> variantGroup in Model.VariantGroups) 41 { 42 bool isColorGroup = variantGroup.Value.Id == Co3.ID.Data.Utilities.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID; 43 string groupClassNameAppend = isColorGroup ? "color" : "size"; 44 int variantTake = 7; 45 46 47 string variantInputFieldName = string.Format("{0}_{1}", Model.Id, variantGroup.Value.Id); 48 <div class="form-group js-e-product-form-variant-form-group e-product-form-variant-form-group-@groupClassNameAppend js-e-product-form-variant-form-group-@groupClassNameAppend" data-auto-select="true" data-variant-take="@variantTake" @(((shopContext == ShopType.B2B || shopContext == ShopType.CustomerShop || !PageView.Current().IsBasketEnabled()) && groupClassNameAppend == "size") ? "hidden" : string.Empty)> 49 <label class="form-control-label d-flex font-weight-semibold small @(isColorGroup == false ? "d-flex justify-content-between" : string.Empty)"> 50 @Translate(string.Format("eCom - Product Details - variant header - {0}", variantGroup.Value.Name), variantGroup.Value.Name) 51 @if (isColorGroup == true) 52 { 53 <span class="js-identity-selected-color-variant-text">@Model.ColorVariantText</span> 54 55 if (Model.SizeGuidePageId > 0) 56 { 57 if (shopContext == ShopType.B2B || shopContext == ShopType.CustomerShop) 58 { 59 if (Model.SizeGuidePageId > 0 || Model.BrandCode == "PRIVATELAB") 60 { 61 <a class="ml-auto text-muted font-weight-normal link-underline" data-toggle="modal" data-target="#identity-size-guide-modal"> 62 @Translate("eCom - Product Details - size guide -link -text", "Størrelsesguide") 63 </a> 64 } 65 } 66 else 67 { 68 <a class="ml-auto text-muted font-weight-normal link-underline" data-toggle="modal" data-target="#identity-size-guide-modal"> 69 @Translate("eCom - Product Details - size guide -link -text", "Størrelsesguide") 70 </a> 71 } 72 73 } 74 75 } 76 </label> 77 <div class="identity-variant-group d-flex"> 78 @{ 79 int variantCount = variantGroup.Value.Options.Count; 80 bool shouldWrapLast = variantCount > variantTake; 81 int variantIndex = 0; 82 string collapseId = string.Format("collapseExtraVariants_{0}", variantGroup.Value.Name); 83 84 IOrderedEnumerable<KeyValuePair<string, EspressoVariantOption>> variantGroupOptions = variantGroup.Value.Options.OrderBy(o => o.Key); 85 86 if (isColorGroup) 87 { 88 variantGroupOptions = variantGroup.Value.Options.OrderByDescending(o => o.Value.Id == variantGroup.Value.SelectedOptionId); 89 } 90 else 91 { 92 Dictionary<string, int> variantGroupOptionSortOrder = ProductService.Instance.GetVariantGroupOptionSortOrder(variantGroup.Value.Name); 93 variantGroupOptions = variantGroup.Value.Options.OrderBy(o => o.Value.Id != null && variantGroupOptionSortOrder.ContainsKey(o.Value.Id) ? variantGroupOptionSortOrder[o.Value.Id] : 99); 94 } 95 } 96 97 98 @foreach (KeyValuePair<string, EspressoVariantOption> variantOption in variantGroupOptions) 99 { 100 string variantInputFieldId = string.Format("{0}_{1}", variantInputFieldName, variantOption.Value.Id); 101 bool isSelected = variantOption.Value.Id == variantGroup.Value.SelectedOptionId; 102 string lastVariantIdBeforeWrap = string.Empty; 103 104 105 if (shouldWrapLast && variantIndex == variantTake) 106 { 107 lastVariantIdBeforeWrap = variantOption.Key; 108 109 <label class="custom-control custom-radio identity-variant-select-option js-identity-variant-select-option"> 110 <span class="custom-control-description disabled"> 111 <span class="@(isColorGroup ? "identity-variant-select-option-color" : "identity-variant-select-option-generic") js-identity-extra-variants-toggler" data-toggle="collapse" href="#@collapseId" role="button" aria-expanded="false"> 112 <span class="js-variant-hidden-count" data-default="@(variantCount - variantTake)">+@(variantCount - variantTake)</span> 113 </span> 114 </span> 115 </label> 116 117 @VariantOption(isColorGroup, isSelected, variantInputFieldId, variantInputFieldName, variantOption, true) 118 119 @:</div> 120 @:<div class="collapse js-identity-extra-variants-collapse" id="@collapseId"> 121 @:<div class="identity-variant-group d-flex"> 122 } 123 124 if (variantOption.Key != lastVariantIdBeforeWrap) 125 { 126 @VariantOption(isColorGroup, isSelected, variantInputFieldId, variantInputFieldName, variantOption) 127 } 128 129 if (shouldWrapLast && (variantIndex + 1) == variantCount) 130 { 131 <label class="custom-control custom-radio identity-variant-select-option"> 132 <span class="custom-control-description disabled"> 133 <span class="@(isColorGroup ? "identity-variant-select-option-color" : "identity-variant-select-option-generic")" data-toggle="collapse" href="#@collapseId" role="button" aria-expanded="false"> 134 <span class="variant-close-toggle"></span> 135 </span> 136 </span> 137 </label> 138 @:</div> 139 } 140 variantIndex++; 141 } 142 </div> 143 </div> 144 } 145 146 </div> 147 } 148 @if (PageView.Current().IsBasketEnabled()) 149 { 150 if (shopContext == ShopType.B2C) 151 { 152 <button class="btn btn-primary btn-lg btn-block position-relative" type="submit"> 153 @Translate("eCom Product - Add To Cart - Button", "Add to cart") 154 </button> 155 } 156 } 157 else 158 { 159 @alternativeAction 160 } 161 162 </form> 163 164 165 @helper VariantOption(bool isColorGroup, bool isSelected, string variantInputFieldId, string variantInputFieldName, KeyValuePair<string, EspressoVariantOption> variantOption, bool boolHide = false) 166 { 167 <label class="custom-control custom-radio identity-variant-select-option @(boolHide == true ? "js-identity-variant-select-option-hidden d-none" : string.Empty)"> 168 <input class="custom-control-input js-e-product-form-variant-group-input required" id="@variantInputFieldId" name="@variantInputFieldName" title="@HttpUtility.HtmlAttributeEncode(variantOption.Value.Name)" data-name="@HttpUtility.HtmlAttributeEncode(variantOption.Value.Name)" type="radio" value="@variantOption.Value.Id" @(isSelected ? "checked" : string.Empty)> 169 @* 170 @if (isColorGroup) 171 { 172 173 } 174 else 175 { 176 string variantComboId = string.Format("{0}.{1}", Model.VariantGroups[Co3.ID.Data.Utilities.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID].SelectedOptionId, variantOption.Value.Id); 177 IdentityProduct idProduct = ProductService.Instance.GetVariantByComboId(Model, variantComboId); 178 <input class="custom-control-input js-e-product-form-variant-group-input required" id="@variantInputFieldId" name="@variantInputFieldName" title="@variantOption.Value.Name" data-name="@variantOption.Value.Name" type="radio" value="@variantOption.Value.Id" @(isSelected ? "checked" : string.Empty) @(idProduct.Stock.Quantity> 0 ? string.Empty : "disabled")> 179 }*@ 180 <span class="custom-control-description"> 181 <div class="identity-corner-brackets-container identity-corner-brackets-all border-primary is-corner-thumb p-0"> 182 <div class="identity-corner-brackets-wrapper border-primary"> 183 184 185 186 187 188 @if (isColorGroup) 189 { 190 EspressoVariantGroup sizeVariantGroup = Model.VariantGroups.FirstOrDefault(vg => vg.Key != Co3.ID.Data.Utilities.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID).Value; 191 string variantComboId = string.Format("{0}.{1}", variantOption.Value.Id, sizeVariantGroup.SelectedOptionId); 192 IdentityProduct idProduct = ProductService.Instance.GetVariantByComboId(Model, variantComboId); 193 EspressoProductImageUrl imageUrl = idProduct?.ImagePrimary; 194 195 if (imageUrl != null) 196 { 197 <span class="identity-variant-select-option-color js-variant-color-image" style="background-image: url(@imageUrl.Small);" data-image="@imageUrl.Small" data-name="@variantOption.Value.Name" data-toggle="tooltip" data-placement="top" title="@variantOption.Value.Name"></span> 198 } 199 else 200 { 201 <span class="identity-variant-select-option-generic"> 202 <span>@variantOption.Value.Name</span> 203 </span> 204 } 205 } 206 else 207 { 208 <span class="identity-variant-select-option-generic"> 209 <span class="js-variant-size-text">@variantOption.Value.Name</span> 210 </span> 211 } 212 213 214 </div> 215 </div> 216 </span> 217 </label> 218 } 219
Klassisk rundringad T-shirt med fyra-lagers ribbstickning i halsen och nack- och axelband. Håller formen tvätt efter tvätt.
Mer ansvarsfull
Tvätta med omtanke
Med rätt tvätt, torkning och skötsel kan du förlänga livslängden på dina kläder.
Inga kläder som matchar dina behov?
Med en Private Label-lösning har du alla möjligheter att designa dina egna stilar med ditt namn/varumärke.
Rapport om företagens sociala ansvar, jfr § 99a i den danska bokföringslagen. ID® ansvarsrapport 2023/2024. Läs här