Exception in template (Designs\StandardWebshop\eCom/Product/Product.cshtml): System.Data.SqlClient.SqlException (0x80131904): Transaction (Process ID 89) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
   at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
   at System.Data.SqlClient.SqlDataReader.Read()
   at Glimpse.Ado.AlternateType.GlimpseDbDataReader.Read()
   at NLWI.Platforms.Dynamicweb8.Specs.Repositories.SpecificationRepository.GetSpecificationObjects(HashSet`1 keys) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\Repositories\SpecificationRepository.cs:line 267
   at NLWI.Platforms.Dynamicweb8.Specs.Services.CachedSpecificationService.b__12_1(HashSet`1 k) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\Services\CachedSpecificationService.cs:line 91
   at NLWI.Core.Platform.Caching.DictionaryCaching.GetOrInsert[TKey,TVal](HashSet`1 keys, Func`2 buildCacheKey, Func`2 lookupMethod, CacheOptions cacheOptions) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Core\Platform\Caching\DictionaryCaching.cs:line 102
   at NLWI.Platforms.Dynamicweb8.Specs.Services.CachedSpecificationService.GetSpecificationObjects(HashSet`1 specificationObjectIdentifiers) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\Services\CachedSpecificationService.cs:line 88
   at NLWI.Platforms.Dynamicweb8.Specs.Services.CachedProductSpecificationService.GetProductSpecifications(HashSet`1 productAutoIds) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\Services\CachedProductSpecificationService.cs:line 56
   at NLWI.Platforms.Dynamicweb8.Specs.Services.CachedProductSpecificationService.GetProductSpecifications(Int64 productAutoId) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\Services\CachedProductSpecificationService.cs:line 83
   at NLWI.Platforms.Dynamicweb8.Specs.ProductSpecificationExtensionMethods.GetProductSpecifications(Int32 autoId) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\ProductSpecificationExtensionMethods.cs:line 48
   at NLWI.Platforms.Dynamicweb8.Specs.ProductSpecificationExtensionMethods.GetProductSpecifications[T](RazorTemplateBase`1 page) in D:\VSO Agents\00TFS01-norriq-ip\_work\35\s\src\NLWI.Platforms.Dynamicweb8.Specs\ProductSpecificationExtensionMethods.cs:line 24
   at CompiledRazorTemplates.Dynamic.afdebbdeccbb.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() in E:\Program Files (x86)\Jenkins\jobs\Release DW881\workspace\Dynamicweb\Rendering\Template.vb:line 778
ClientConnectionId:5e587cc0-9717-4b25-b05a-7085c7de798e
Error Number:1205,State:52,Class:13
@using System.Globalization @using NORRIQ.Common8.Razor; @using System.Linq @using Dynamicweb.Content.Items.Annotations @using NORRIQ.Common8.Factory @using NLWI.Platforms.Dynamicweb8.Specs; @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @{ var giftlistLink = Navigation.GetUrlByNavigationTag("edit-giftlist"); var docs = NORRIQ.EcomMedia.Frontend.GetProductMedia(this); var area = GetGlobalValue("Global:Area.Lang"); var productname = GetString("Ecom:Product.Name"); var productbrand = GetString("Ecom:Product.Manufacturer"); var price = GetDouble("Ecom:Product.Price.PriceWithVAT"); var beforeprice = GetDouble("Ecom:Product:Field.Beforeprice.Value"); var def = "/Default.aspx?ID="; var currency = GetString("Ecom:Product.Price.Currency.Code"); var ShoppingGuideID = Translate("Shopping Guide ID", "51"); var specs = this.GetProductSpecifications(); var ShoppingGuide = Navigation.GetPageIdByNavigationTag("shoppingguideModal"); var images = specs.GetAllByKey("Billeder"); var keyWords = specs.GetByKey("Keywords").Value; var alttext = specs.GetByKey("ProductName").Value + ", " + specs.GetByKey("Brand").Value + ", " + specs.GetByKey("Designer").Value; var priceForContent = GetString("NIQ:PriceForGoogle"); // Soldout / Limited supply // The point here is to provide IBH with a way of quickly managing the state of a product // without doing a full import from XPI. The stockNumber, soldOut and limitedSupply variables are used as follows: // 1) If stockNumber is less and 1, or the soldOut flag is true, the product cannot be bought. // 2) If the limitedSupply flag is set, the user will be notified of a limited supply, but the product can still be bought. // These 3 variables are all reset when doing a full import from XPI (Done via NLWI sync activities). var stockNumber = GetDouble("Ecom:Product.Stock"); var soldOut = string.Equals(GetString("Ecom:Product:Field.Soldout.Value"), "true", StringComparison.OrdinalIgnoreCase); var limitedSupply = string.Equals(GetString("Ecom:Product:Field.LimitedSupply"), "true", StringComparison.OrdinalIgnoreCase); } <div class="row product" itemscope itemtype="http://schema.org/Product"> @* ProductImages *@ <div class="col-xs-12 col-sm-6 col-md-6"> <figure class="product-img"> @if(soldOut || stockNumber < 1) { <span class="img-label">@Translate("Soldtout", "Udsolgt")</span> } else if (limitedSupply) { <span class="img-label">@Translate("LImitedSupply", "Begrænset antal")</span> } else if (specs.GetByKey("LeveringsTid").GetReferenceSpecification().GetByKey("Id").Value == "Udsolgt") { <span class="img-label">@specs.GetByKey("Leveringstid").Value</span> } else if (!string.IsNullOrEmpty(specs.GetByKey("BobbelTekst").Value)) { <span class="img-label">@specs.GetByKey("BobbelTekst").Value</span> } @if (images.Any()) { var firstImg = images.First().Value; <div class="product-images"> <div id="product-images"> <div class="product-image"> <a class="product-image-inner" href="/Admin/Public/GetImage.ashx?Width=850&amp;Height=850&amp;Crop=5&amp;Compression=90&amp;Image=/Files/Images/XPI/@firstImg" data-source="@firstImg"> <img class="img-responsive" src="/Admin/Public/GetImage.ashx?Width=540&amp;Height=540&amp;Crop=5&amp;Compression=90&amp;Image=/Files/Images/XPI/@firstImg" alt="@alttext" itemprop="image"/> </a> </div> </div> @foreach (var image in images.Skip(1)) { <div class="product-image"> <div class="product-image-inner"> <a class="product-image-inner" href="/Admin/Public/GetImage.ashx?Width=850&amp;Height=850&amp;Crop=5&amp;Compression=90&amp;Image=/Files/Images/XPI/@image.Value" data-source="@image.Value"> <img class="img-responsive" src="/Admin/Public/GetImage.ashx?Width=540&amp;Height=540&amp;Crop=5&amp;Compression=90&amp;Image=/Files/Images/XPI/@image.Value" itemprop="image" alt="@alttext"/> </a> </div> </div> } </div> } else { <div class="product-images"> <div class="product-image"> <div class="product-image-inner"> <a class="product-image-inner" href="/Files/Images/Ecom/default.jpg"> <img class="img-responsive" src="/Admin/Public/GetImage.ashx?Width=540&amp;Height=540&amp;Crop=5&amp;Compression=90&amp;Image=/Files/Images/Ecom/default.jpg"/> </a> </div> </div> </div> } @if (images.Count() > 1) { <div id="product-images-thumbs" class="product-thumbs"> @foreach (var billede in images) { <div class="product-thumb"> <div class="product-thumb-inner"> <img src="/Admin/Public/GetImage.ashx?Width=110&amp;Height=110&amp;Crop=5&amp;Compression=80&amp;Image=/Files/Images/XPI/@billede.Value" alt="@alttext" class="img-responsive"/> </div> </div> } </div> } <figcaption>@specs.GetByKey("ProductName").Value</figcaption> </figure> </div> @* Product information *@ <div class="col-xs-12 col-sm-6 col-md-6 product-data"> <p class="product-brand" itemprop="brand"> @specs.GetByKey("Brand").Value </p> <h1 class="product-name" itemprop="name"> @specs.GetByKey("ProductName").Value </h1> @* Pricing *@ <p class="product-price" itemprop="offers" itemscope itemtype="http://schema.org/Offer"> @if (GetString("Ecom:Product:Field.Beforeprice.Value") != "") { <span class="product-price-before"> @Translate("Before", "Før") <span class="digit"> @GetString("Ecom:Product:Field.Beforeprice.Value") </span> </span> <span class="product-price-now"> @Translate("Now", "Nu") <span class="digit" itemprop="price">@GetString("Ecom:Product.Price.PriceWithVAT")</span> </span> } else { <span class="digit" itemprop="price" content="@priceForContent"> @GetString("Ecom:Product.Price.PriceWithVAT") </span> } <span itemprop="priceCurrency" content="@currency">@currency</span> </p> @* Product collapse *@ <div class="product-collapse panel-group" id="productinfo" role="tablist" aria-multiselectable="true"> <div class="panel"> <div class="panel-heading" role="tab" id="headingSpecs"> <a class="product-collapse-button" role="button" data-toggle="collapse" data-parent="#productinfo" data-target="#collapseSpecs" aria-expanded="true" aria-controls="collapseSpecs"> @Translate("Product details", "Detaljer") </a> </div> <div id="collapseSpecs" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingSpecs" aria-expanded="true" itemprop="additionalProperty"> @if (specs.GetByGroup("Produkt detaljer").Any()) { <ul> @foreach (var spec in specs.GetByGroup("Produkt detaljer").GroupBy(a => a.Key)) { if (spec.First().Key == "Link") { <li> <a href="@spec.First().Value" target="_blank">@spec.First().Caption</a> </li> } else { <li> @spec.First().Caption: @String.Join(", ", spec.Select(a => a.Value)) </li> } } </ul> } </div> </div> <div class="panel"> <div class="panel-heading" role="tab" id="headingDescription"> <a class="product-collapse-button collapsed" role="button" data-toggle="collapse" data-parent="#productinfo" data-target="#collapseDescription" aria-expanded="false" aria-controls="collapseDescription"> @Translate("Product Description", "Beskrivelse") </a> </div> <div id="collapseDescription" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingDescription" aria-expanded="false" itemprop="description"> <p>@specs.GetByKey("Beskrivelse").Value</p> </div> </div> </div> @* Add to cart inputs *@ @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @using StandardWebshop.CustomCode.ViewModels.Variants; @{ var variants = GetLoop("VariantGroups").GetVariants(); // In IBH, the Product Number can be used as a unique product identifier. var currentProductNumber = GetString("Ecom:Product.Number"); // All variant products and their associated variant groups/options. var variantProducts = GetLoop("VariantCombinations").GetVariantProducts(variants, currentProductNumber); var productsDictionary = VariantViewModelBuilder.GetProductsInDimensionOrder(variants, variantProducts); var selectedVariant = VariantViewModelBuilder.GetSelectedOrEmpty(variantProducts); } @{ @* These lines are required because lazy load's its data. GetString("Ecom:VariantGroup.Label") GetString("Ecom:VariantGroup.Name") GetLoop("VariantAvailableOptions") GetString("Ecom:VariantOption.ID") GetString("Ecom:VariantOption.Name") *@ } @* // This will display all the different variants, and highlight the one currently being viewed. <h1>Test</h1> <ul> @foreach (var v1 in productsDictionary) { <li>@v1.Key.GroupName || @v1.Key.OptionId</li> <li> <ul> @foreach (var v2 in v1.Value) { <li @(v2.Value.IsSelected ? "style='font-weight:bold'" : "")>@v2.Key.GroupName || @v2.Key.OptionId ## <a href="@v2.Value.LinkToGroup">@v2.Value.Name</a></li> } </ul> </li> } </ul>*@ @if (variants.Count == 0) { @* No variants *@ } else if (variants.Count == 1) { <div class="form-group"> <label for="variant1Selector">@Translate("Choose", "Vælg") <span class="text-lowercase">@selectedVariant.Variant1.GroupLabel</span></label> <select class="form-control" id="variant1Selector"> @*<option value="0"> @Translate("Choose", "Vælg") @selectedVariant.Variant1.GroupLabel </option>*@ @foreach (var v1 in productsDictionary.Where(a => !string.IsNullOrEmpty(a.Key.OptionId))) { var isSelected = selectedVariant.Variant1.Equals(v1.Key); var product = v1.Value.First(); var linkToGroup = product.Value.LinkToGroup; <option value="@v1.Key.OptionId" @(isSelected ? "selected='selected'" : "") data-linktogroup="@linkToGroup">@v1.Key.OptionName</option> } </select> </div> } else { <div class="row"> <div class="col-sm-6"> <div class="form-group"> <label for="variant1Selector">@Translate("Choose", "Vælg") <span class="text-lowercase">@selectedVariant.Variant1.GroupLabel</span></label> <select class="form-control" id="variant1Selector"> @foreach (var v1 in productsDictionary.Where(a => !string.IsNullOrEmpty(a.Key.OptionId))) { var isSelected = selectedVariant.Variant1.Equals(v1.Key); <option value="@v1.Key.OptionId" @(isSelected ? "selected='selected'" : "")>@v1.Key.OptionName</option> } </select> </div> </div> <div class="col-sm-6"> <div class="form-group"> <label for="variant2Selector">@Translate("Choose", "Vælg") <span class="text-lowercase">@selectedVariant.Variant2.GroupLabel</span></label> <select class="form-control" id="variant2Selector"> @foreach (var v1 in productsDictionary.Where(pde => pde.Key.Equals(selectedVariant.Variant1))) { foreach (var v2 in v1.Value.Where(a => !string.IsNullOrEmpty(a.Key.OptionId))) { var isSelected = selectedVariant.Variant2.Equals(v2.Key); <option value="@v2.Key.OptionId" @(isSelected ? "selected='selected'" : "") data-linktogroup="@v2.Value.LinkToGroup">@v2.Key.OptionName</option> } } </select> </div> </div> </div> } <script type="text/x-jsrender" id="emptyVariant2OptionTemplate"> <option value="0"> @Translate("Choose", "Vælg") @selectedVariant.Variant1.GroupLabel </option> </script> <script type="text/x-jsrender" id="variant2OptionTemplate"> <option value="0"> @Translate("Choose", "Vælg") @selectedVariant.Variant2.GroupLabel </option> {{for Products}} <option value="{{:OptionId}}" data-linktogroup="{{:LinkToGroup}}">{{:OptionName}}</option> {{/for}} </script> <script append="true"> var variantData = [ @for (int i = 0; i < productsDictionary.Count; i++) { var v1 = productsDictionary.ElementAt(i); <text> { "GroupLabel": "@v1.Key.GroupLabel", "GroupName": "@v1.Key.GroupName", "OptionId": "@v1.Key.OptionId", "OptionName": "@v1.Key.OptionName", "Products": [ @for (int j = 0; j < v1.Value.Count; j++) { var v2 = v1.Value.ElementAt(j); <text> { "GroupLabel": "@v2.Key.GroupLabel", "GroupName": "@v2.Key.GroupName", "OptionId": "@v2.Key.OptionId", "OptionName": "@v2.Key.OptionName", "LinkToGroup": "@v2.Value.LinkToGroup" }@(j + 1 == v1.Value.Count ? "" : ",") </text> } ] }@(i + 1 == productsDictionary.Count ? "" : ",") </text> } ]; require(['jquery', 'standardwebshop/areas/ecom/product/variantselection'], function($, variantSelection) { // 0 == no variants, 1 == single variant, 2 == 2 variants. var variantMode = @variants.Count; if (variantMode == 0) return; variantSelection.init({ $emptyVariant2OptionTemplate: $('#emptyVariant2OptionTemplate'), $variant2OptionTemplate: $('#variant2OptionTemplate'), $v1Selector: $('#variant1Selector'), $v2Selector: $('#variant2Selector'), // 0 == no variants, 1 == single variant, 2 == 2 variants. variantMode: variantMode, variantData: variantData }); }); </script> <hr class="divider hide" /> <div class="row action"> <div class="col-sm-12"> <form class="form-horizontal product-form clearfix" id="prodform_@GetString("Ecom:Product:Page.ID")" name="prodform_@GetString("Ecom:Product:Page.ID")" method="post" action="@GetGlobalValue("Global:Pageview.Url.Raw")"> <div class="branding"> <span class="line line-SM"></span> </div> @GetString("Ecom:Product.Form.Clean") <div class="form-group"> <div class="col-xs-12 col-md-6"> @if (stockNumber > 0 && !soldOut && specs.GetByKey("LeveringsTid").GetReferenceSpecification().GetByKey("Id").Value != "Udsolgt" && specs.GetByKey("LeveringsTid").GetReferenceSpecification().GetByKey("Id").Value != "FremtidigKoeb") { <label for="quantity" class="sr-only">@Translate("Number", "Antal")</label> <div class="input-group input-group-lg"> <div class="input-group-addon"> @Translate("Quantity", "Antal") </div> <input type="number" name="quantity" id="quantity" value="1" min="1" max="9999" class="form-control form-control-qty text-center" autocomplete="off" /> <div class="input-group-addon"> @Translate("Pcs", "stk.") </div> </div> } else { if(stockNumber < 1 || soldOut) { <p class="text-warning">@Translate("TemporaryUnavailable", "Varen er midlertidigt udsolgt.")</p> } else { <p class="text-warning">@specs.GetByKey("Leveringstid").Value</p> } <input type="hidden" name="quantity" id="quantity" value="1" /> } </div> <div class="col-xs-12 col-md-6"> @if (stockNumber > 0 && !soldOut && specs.GetByKey("LeveringsTid").GetReferenceSpecification().GetByKey("Id").Value != "Udsolgt" && specs.GetByKey("LeveringsTid").GetReferenceSpecification().GetByKey("Id").Value != "FremtidigKoeb") { <p> <button class="btn btn-primary btn-block btn-lg" role="button" type="submit"> @Translate("Add_to_cart", "Køb") </button> </p> } else { <p> <a class="btn btn-primary btn-block btn-lg text-modal" href="#nostockModal"> @Translate("nostock_btn", "Giv mig besked") </a> </p> } <div class="js-addedToGiftlist"></div> <p class="no-margin"> <a href="javascript:void(0)" class="btn btn-default btn-block js-giftlist-trigger"> @Translate("Add to giftlist", "Tilføj til gaveliste") </a> </p> </div> </div> <div class="branding"> <span class="line line-SM"></span> </div> </form> </div> </div> <div class="row"> @RenderSnippet("usplist") </div> <p class="margin-top text-right text-small"> @Translate("Need help", "Brug for hjælp?") <a href="#guide-modal" class="content-popup">@Translate("See our shopping guide", "Se vores shopping guide")</a> </p> </div> </div> @* External loop, this loop must be here because it is hooked into by AddWish, which then overwrites the HTML. *@ <h2>@Translate("other_favorites_heading", "Andre favoritter")</h2> <div class="row" id="partnerloop"> @if (GetLoop("eCom:Related.WhatAboutTheseProducts").Any()) { <ul class="list-unstyled productlist productlist-grid-flex productlist-grid-zoom"> @foreach (var product in GetLoop("eCom:Related.WhatAboutTheseProducts").Take(4)) { var link = "/default.aspx?ID=" + Navigation.GetPageIdByNavigationTag("ecom") + "&amp;groupid=" + product.GetString("Ecom:Product.PrimaryOrFirstGroupID") + "&amp;productid=" + product.GetString("Ecom:Product.ID"); var buy = "/default.aspx?ID=" + Navigation.GetPageIdByNavigationTag("ecom") + "&amp;productid=" + product.GetString("Ecom:Product.ID") + "&amp;cartcmd=add"; var proname = product.GetString("Ecom:Product.Name"); var expandtext = Translate("imageexpand", "Vis stort billede"); var relaspec = product.GetProductSpecifications(); var modalLinkText = Translate("Show product", "Vis produkt"); var variantstext = Translate("variants_icon_text", "Varen fås i flere varianter"); <li class="col-xs-6 col-sm-3 productlist-grid productlist-grid-flexitem async-price"> <div class="productlist-grid-product productlist-grid-flexcontent text-center"> <figure> <a href="/Files/Images/XPI/@relaspec.GetByKey("Billeder").Value" class="productlist-grid-expand" data-source="@link" data-title="@relaspec.GetByKey("Brand").Value - @proname" data-link-text="@modalLinkText" title="@expandtext"><i class="pe-is-i-expand-margin-f pe-va"></i></a> <a class="productlist-grid-image" href="@link" title="@proname"> <div class="valign"> @if (relaspec.GetByKey("Billeder").Value != "") { <img src="/Admin/Public/GetImage.ashx?Width=200&amp;Height=200&amp;Crop=5&amp;Compression=80&amp;Image=/Files/Images/XPI/@relaspec.GetByKey("Billeder").Value" class="img-responsive" alt="@relaspec.GetByKey("Keywords").Value" /> } else { <img src="/Admin/Public/GetImage.ashx?Width=200&amp;Height=200&amp;Crop=5&amp;Compression=80&amp;Image=/Files/Images/Ecom/default.jpg" class="img-responsive" alt="@Translate("No image for this product","Intet billede")" /> } </div> </a> @if (product.GetInteger("Ecom:Product.VariantCount") > 0) { <span class="variantsign" title="@variantstext"><i class="pe-is-i-layers"></i></span> } </figure> <div class="productlist-grid-info"> <p class="productlist-grid-brand"> @relaspec.GetByKey("Brand").Value </p> <p class="productlist-grid-caption"> <a href="@link" class="productlist-grid-name"> @proname </a> </p> <p class="productlist-grid-price-info"> @if (product.GetLoop("VariantCombinations").Count() > 0) { <span>@Translate("priceText_From", "Fra")</span> } @if (product.GetString("Ecom:Product:Field.Beforeprice.Value") != "") { <span class="productlist-grid-price-before"> @Translate("Before", "Før") @product.GetString("Ecom:Product:Field.Beforeprice.Value") </span> <br /> <span class="productlist-grid-price-now"> @Translate("Now", "Nu") @product.GetString("Ecom:Product.Price.PriceWithVAT") @currency </span> } else { <span class="productlist-grid-price-price"> @product.GetString("Ecom:Product.Price.PriceWithVAT") @currency </span> } </p> </div> </div> </li> } </ul> } </div> <div id="guide-modal" class="mfp-hide white-popup-block"> <div class=""> <button role="button" class="mfp-close">&#215;</button> <div class="clearfix"> @RenderPageContent(Navigation.GetPageIdByNavigationTag("guide")) </div> </div> </div> @* Nostock modal *@ <div id="nostockModal" class="mfp-hide"> <div class="popup-small"> <button role="button" class="mfp-close">&#215;</button> <div class="popup-white clearfix"> @{ var usermail = Pageview.User.Email; } <h2 class="modal-title">@Translate("modal_nostock_heading", "Giv mig besked")</h2> <p>@Translate("modal_nostock_txt", "Vi sender dig en e-mail, når denne vare igen er på lager.")</p> <form name="@GetValue("Ecom:Product.ID")" method="post" class="form validation" role="form" action=""> <input type="hidden" name="ProductID" value="@GetValue("Ecom:Product.ID")" /> <input type="hidden" name="VariantID" value="@GetValue("Ecom:Product.VariantID")" /> <input type="hidden" name="LanguageID" value="@GetValue("Ecom:Product.LanguageID")" /> <input type="hidden" name="CartCmd" value="createnotificationforthisproduct" /> <div class="form-group"> <label for="NotificationEmail">@Translate("ns_email", "E-mail adresse")</label> <input name="NotificationEmail" id="NotificationEmail" type="email" value="@usermail" class="required form-control"> </div> <p class="lower"> <button type="submit" class="btn btn-primary btn-block">@Translate("nostocksend_btn", "Send")</button> </p> </form> </div> </div> </div> <div id="giftlistLogin" class="mfp-hide"> <div class="popup-small"> <button role="button" class="mfp-close">&#215;</button> <div class="popup-white clearfix"> <h2>@Translate("giftlist", "Gaveliste")</h2> <span>@Translate("giftlist_not_loggedin", "Du bedes logge ind for at kunne tilføje til din gaveliste.")</span> <h3>@Translate("login_pop_header", "Log ind")</h3> <form name="ExtUserForm" method="post" class="form validation" role="form" action="@(System.Web.HttpContext.Current.Request.Url.PathAndQuery)" id="giftListLoginForm"> <div class="form-group"> <label for="giftListUsername">@Translate("usernameLabel", "Brugernavn")</label> <input id="giftListUsername" name="Username" type="text" value="" class="form-control" required> </div> <div class="form-group"> <label for="giftListPassword">@Translate("password", "Adgangskode")</label> <input id="giftListPassword" name="Password" type="password" value="" class="form-control" required> </div> <div id="giftListloginFeedback"></div> <p class=""> <button type="submit" role="button" class="btn btn-primary btn-block" id="giftListloginBtn">@Translate("buttonLogin", "Log ind")</button> </p> </form> @{ var giftListPasswordUrl = Navigation.GetUrlByNavigationTag("forgot-password"); var giftListNewUserUrl = Navigation.GetUrlByNavigationTag("new-user"); } <ul class="list-unstyled"> <li> <a href="@giftListPasswordUrl" class="forgot-password">@Translate("label_forgotten_password", "Glemt adgangskode")</a> </li> <li> <a href="@giftListNewUserUrl">@Translate("label_create_new_user", "Opret ny bruger")</a> </li> </ul> </div> </div> </div> <script id="addedToGiftlist" type="text/x-jsrender"> <p class="text-success"> @Translate("Added to giftlist info", "Varen er tilføjet til din gaveliste") <a href="@giftlistLink" class="btn btn-default btn-block"> @Translate("Show giftlist button", "Vis gaveliste") </a> </p> </script> <script append="true"> require(['standardwebshop/areas/ecom/product'], function (product) { product.init(); }); require(['jquery', 'shared/norriq.giftlist/addtogiftlist'], function ($, giftlist) { giftlist.init({ loggedIn: @Pageview.User.LoggedIn.ToString().ToLower(), $loginModal: $('#giftlistLogin'), $addToGiftlistBtn: $('.js-giftlist-trigger'), $confirmationContainer: $('.js-addedToGiftlist'), $confirmationTemplate: $('#addedToGiftlist') }); }); require(['standardwebshop/areas/user/login'], function (AsyncLogin) { var login = new AsyncLogin({ $loginForm: $("#giftListLoginForm"), $username: $("#giftListUsername"), $password: $("#giftListPassword"), $loginBtn: $('#giftListloginBtn'), $feedbackContainer: $('#giftListloginFeedback') }); login.init(); }); </script> @* Facebook Pixel tracking, CAS-25405-W5J7V5 *@ <script append="true"> if (typeof fbq != "undefined") { @{ var fbqAddedToCartHelper = NORRIQ.Common8.Factory.ObjectFactory.GetInstance<StandardWebshop.CustomCode.Cart.AddedToCart.AddedToCartHelper>(); var fbqProduct = Dynamicweb.eCommerce.Products.Product.GetProductByID(GetString("Ecom:Product.ID")); var fbqViewContentPrice = fbqProduct.Price.PriceWithVAT.ToString("F2", new System.Globalization.CultureInfo("en-US")); } fbq('track', 'ViewContent', { content_ids: ['@GetString("Ecom:Product.Number")'], content_type: 'product', content_name: '@specs.GetByKey("ProductName").Value', value: '@fbqViewContentPrice', currency: '@currency' }); @if (fbqAddedToCartHelper.WasProductAdded()) { <text> fbq('track', 'AddToCart', { content_ids: ['@GetString("Ecom:Product.Number")'], content_type: 'product', content_name: '@specs.GetByKey("ProductName").Value', value: '@fbqViewContentPrice', currency: '@currency' }); </text> } } </script>
printlogo
Vi bruger cookies for at forbedre din oplevelse af illumsbolighus.dk. Ved at klikke videre accepterer du vores brug af cookies Ok