Error executing template "Designs/Designa/_parsed/Dw_ProductPage.parsed.cshtml"
System.IO.IOException: The process cannot access the file 'E:\WEB\designa.dk\Files\System\EventNotifications\65eca2995c2e0a4f7bfb55beff0a60fe_SentTime' 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, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
at Dynamicweb.EventViewerSubscriber.SaveLastSentTime(LogEventNotification logEventNotification)
at Dynamicweb.EventViewerSubscriber.SendMessage(LogEventNotification logEventNotification)
at Dynamicweb.EventViewerSubscriber.OnNotify(String NotificationArgs, NotificationArgs args)
at Dynamicweb.Extensibility.Notifications.NotificationManager.Notify(String notification, NotificationArgs eventArgs)
at Dynamicweb.Logging.LoggerBase.Log(LogLevel level, String message, Exception ex)
at Dynamicweb.Frontend.SearchEngineFriendlyURLs.ResolveQueryString(String fullQueryString, Int32 pageid, String alternatekey)
at Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(String internalLink)
at CompiledRazorTemplates.Dynamic.RazorEngine_a3426ff11b33436096e8065d13d86414.Execute() in E:\WEB\designa.dk\Files\Templates\Designs\Designa\_parsed\Dw_ProductPage.parsed.cshtml:line 16
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 Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
2 @using Designa.Website.CustomModules.ViewModels
3 @using Designa.Website.CustomModules
4 @using Designa.Website.CustomModules.Helpers
5 @using Dynamicweb.Frontend
6 @using Dynamicweb.Rendering
7
8 @{
9 var httpRequest = System.Web.HttpContext.Current.Request;
10 var scheme = httpRequest.Url.Scheme;
11 var host = httpRequest.Url.Host;
12 var pageTitle = PageView.Current().Page.MetaTitle;
13 var metaDescription = PageView.Current().Page.Description;
14 var frontPageId = Pageview.GetPageviewModel().Area.FirstPage.ID.ToString();
15 var currentPageId = PageView.Current().Page.ID.ToString();
16 var currentUrl = SearchEngineFriendlyURLs.GetFriendlyUrl(currentPageId);
17 var canonicalUrl = TemplateHelper.GetCanonical(httpRequest, Pageview.ID);
18 var getNoIndexNoFollow = TemplateHelper.GetNoIndexNoFollow(httpRequest, Pageview.ID);
19 var pathToStyles = Constants.DistPath + "/css/master.min.css";
20 var pathToJsManifest = Constants.DistPath + "/scripts/manifest.bundle.js";
21 var pathToJsVendor = Constants.DistPath + "/scripts/vendor.bundle.js";
22 var pathToJsApp = Constants.DistPath + "/scripts/app.bundle.js";
23 var pathToCustomScripts = Constants.ProjectPath + "/Scripts/custom.js";
24 var pathToLogo = Constants.DistPath + "/images/logo.svg";
25 var productId = System.Web.HttpContext.Current.Request.QueryString["productid"];
26 var gtm = Dynamicweb.Frontend.PageView.Current().AreaSettings.GetString("GTM_ID");
27
28 }
29 <!DOCTYPE html>
30 <html lang="@Pageview.Area.CultureInfo.TwoLetterISOLanguageName" xmlns:xlink="http://www.w3.org/1999/xlink">
31 <head>
32 <meta charset="utf-8">
33 <meta name="viewport" content="width=device-width, initial-scale=1">
34 <link rel="preconnect" href="https://fonts.gstatic.com">
35 <link rel="preconnect" as="style" href="https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Prata&family=Spartan:wght@500;700&display=swap">
36 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Prata&family=Spartan:wght@500;700&display=swap" media="print" onload="this.media = 'all'">
37 <noscript>
38 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Prata&family=Spartan:wght@500;700&display=swap">
39 </noscript>
40
41 @if (host.Contains("local") || host.Contains("stagingsite") || host.Contains("ditnyewebsite"))
42 {
43 <meta name="robots" content="noindex, nofollow">
44 }
45 else
46 {
47 if(!string.IsNullOrEmpty(getNoIndexNoFollow))
48 {
49 @getNoIndexNoFollow
50 }
51 }
52
53 <title>@GetValue("Title")</title>
54
55 @if (string.IsNullOrEmpty(canonicalUrl) && currentPageId == frontPageId) // Frontpage
56 {
57 <link rel="canonical" href="/">
58 }
59 else if (!string.IsNullOrEmpty(canonicalUrl))
60 {
61 <link rel="canonical" href="@canonicalUrl">
62 }
63 else
64 {
65 <link rel="canonical" href="@PageView.Current().Page.MetaCanonical">
66 }
67
68 @if (!string.IsNullOrEmpty(metaDescription))
69 {
70 <meta name="description" content="@metaDescription">
71 }
72 <meta name="p:domain_verify" content="b2eeee1f0a8002e1df4ad3d202252517">
73 <meta property="og:image" content="@TemplateHelper.GetAbsoluteUrl(pathToLogo)">
74 <link media="all" href="@TemplateHelper.GetRevisionNumber(pathToStyles)" rel="stylesheet">
75 <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png">
76 <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png">
77 <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png">
78 <script src="@TemplateHelper.GetRevisionNumber(pathToCustomScripts)"></script>
79
80 @if (!host.Contains("local") && !String.IsNullOrEmpty(gtm))
81 {
82
83 <!-- Google Tag Manager -->
84 <script>
85 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
86 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
87 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
88 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
89 })(window,document,'script','dataLayer','@gtm');</script>
90 <!-- End Google Tag Manager -->
91 }
92 <!-- TrustBox script -->
93 <script type="text/javascript" src="//widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js" async=""></script>
94 <!-- End TrustBox script -->
95 </head>
96 <body class="">
97
98 @if (!host.Contains("local") && !String.IsNullOrEmpty(gtm))
99 {
100 <!-- Google Tag Manager (noscript) -->
101 <noscript>
102 <iframe src="https://www.googletagmanager.com/ns.html?id=@gtm" height="0" width="0" style="display:none;visibility:hidden"></iframe>
103 </noscript>
104 <!-- End Google Tag Manager (noscript) -->
105 }
106
107 @TemplateHelper.RenderPartial("Master/Partials/GlobalHeader.cshtml", new GlobalHeaderViewModel(Pageview))
108 @TemplateHelper.RenderPartial("Master/Partials/Navigation.cshtml")
109 @*@inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
110 @using Designa.Website.CustomModules
111 @using Designa.Website.CustomModules.Helpers
112 @using Designa.Website.CustomModules.Helpers.Models
113 @using Dynamicweb
114 @using Dynamicweb.Content
115 @using Dynamicweb.Ecommerce.Frontend
116 @using Dynamicweb.Frontend
117
118 @{
119 var Button1Text = Pageview.AreaSettings.GetString("NavigationButton1Text");
120 var Button1Link = Pageview.AreaSettings.GetString("NavigationButton1Link");
121
122 var Button2Text = Pageview.AreaSettings.GetString("NavigationButton2Text");
123 var Button2Link = Pageview.AreaSettings.GetString("NavigationButton2Link");
124
125 var Button3Text = Pageview.AreaSettings.GetString("NavigationButton3Text");
126 var Button3Link = Pageview.AreaSettings.GetString("NavigationButton3Link");
127
128 var ctaImages = new List<CallToActionImage>();
129 var ctaImageLinks = TemplateHelper.GetItemRelationListWithId(Pageview, "CTAImageLinks", "CTAImageLink");
130
131 foreach (var ctaImage in ctaImageLinks)
132 {
133 ctaImages.Add(new CallToActionImage(ctaImage));
134 }
135
136
137 var textCloseNavigation = Translate("NavigationOverlay.CloseNavigation", "Luk navigationen");
138 }
139
140 <div class="navigation-overlay navigation-overlay--closed" id="js-navigation-overlay">
141 <div class="container navigation-overlay__container">
142 <div class="row navigation-overlay__row-navigation">
143 <div class="col-xs-7 col-sm-9 col-lg-8 col-lg-offset-1 navigation-overlay__col" id="js-navigation-overlay__navigation">
144
145 <nav class="navigation-desktop" v-bind:aria-hidden="navigationLayout === 'mobile'">
146 <ul class="navigation-desktop__list">
147 @RenderNavigationListItem("desktop1")
148
149 </ul>
150
151 <ul class="navigation-desktop__list-level-2">
152 @RenderNavigationListItem("desktop2")
153
154 </ul>
155 </nav>
156
157 <nav class="navigation-mobile" v-bind:aria-hidden="navigationLayout === 'desktop'">
158 <ul class="navigation-mobile__list">
159 @RenderNavigationListItem("mobile")
160 </ul>
161 </nav>
162 </div>
163 <div class="col-xs-5 col-sm-3 col-lg-2 navigation-overlay__col">
164 @if (!String.IsNullOrWhiteSpace(Button1Text) && !String.IsNullOrWhiteSpace(Button1Link))
165 {
166 <a href="@Button1Link" property="url" class="button button--color-2 button--full-width">@Button1Text</a>
167 }
168 @if (!String.IsNullOrWhiteSpace(Button2Text) && !String.IsNullOrWhiteSpace(Button2Link))
169 {
170 <a href="@Button2Link" property="url" class="button button--color-1-mid button--full-width">@Button2Text</a>
171 }
172 @if (!String.IsNullOrWhiteSpace(Button3Text) && !String.IsNullOrWhiteSpace(Button3Link))
173 {
174 <a href="@Button3Link" property="url" class="button button--ghost-black button--full-width">@Button3Text</a>
175 }
176 </div>
177
178 </div>
179 <div class="row">
180 <div class="col-xs-12">
181 <ul class="highlights">
182 @foreach (var ctaImage in ctaImages) {
183 <li class="highlights__item">
184 <img class="lazyload lazyload-bg image lazyload-measure lazyload-bg " width="0" height="0" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="@ctaImage.ImageAltText" property="contentUrl" data-src="@ctaImage.ImageLink" data-query-obj='{"mode":"crop"}'>
185 <noscript v-if="false">
186 <img src="@ctaImage.ImageLink?mode=crop&width=" alt="@ctaImage.ImageAltText">
187 </noscript>
188
189 <a href="@ctaImage.PageLink" class="h3 highlights__link">@ctaImage.Name</a>
190 </li>
191 }
192 </ul>
193 </div>
194 </div>
195
196 </div>
197
198 <button type="button" class="close-overlay-button" @@click="close" title="@textCloseNavigation">
199 <span class="visually-hidden">@textCloseNavigation</span>
200 </button>
201 </div>
202
203 @helper RenderNavigationListItem(string navigationType)
204 {
205 var rootNodes = Services.Pages.GetAreaNavigationTree(Pageview.AreaID).RootNodes.Where(x => x.IsPublished);
206 var currentContentItemPathIds = DWHelper.GetContentTreePageIds(Pageview.Page);
207
208 if(navigationType == "mobile") {
209 rootNodes = Services.Pages.GetAreaNavigationTree(Pageview.AreaID).RootNodes.Where(x => x.IsPublished);
210 }
211
212 int listCount = 0;
213 foreach (var node in rootNodes)
214 {
215 //Check børnebørn(e)børn osv
216 var children = node.Children.Where(x => x.IsPublished).OrderBy(x => x.Sort).ToList();
217 bool hasChildren = children.Count > 0;
218 var dataHasSubnavigation = hasChildren ? "data-has-subnavigation=\"true\"" : "";
219 var pageIsActive = currentContentItemPathIds.FirstOrDefault(x => x == node.ID) != 0;
220 var dataLevel1Active = pageIsActive ? "data-level-1-active=\"true\"" : "";
221
222 var itemLevel = 1;
223 var activeVueClass = "";
224 var vif="";
225 var baseClass = "navigation-desktop";
226
227 if(navigationType == "desktop2") {
228 itemLevel = 2;
229 vif="v-if=\"activeItemLevel1 === "+listCount+"\"";
230 }
231
232 if(navigationType == "mobile") {
233 baseClass = "navigation-mobile";
234 }
235
236 if(navigationType == "desktop1" || navigationType == "mobile"){
237 activeVueClass = "v-bind:class=\"{'"+baseClass+"__item-level-1--active': activeItemLevel1 === "+listCount+" }\"";
238 }
239
240 <li class="@(baseClass)__item-level-@itemLevel" @datahassubnavigation="" @datalevel1active="" @vif="" @activevueclass="" data-level-1-id="@listCount">
241
242 @if(navigationType == "desktop1" || navigationType == "mobile"){
243 if (hasChildren)
244 {
245 <button type="button" class="h5 @(baseClass)__link-level-1" @@click="show(@listCount)">@node.Title
246 <span class="navigation-overlay__arrow">
247 <svg class="svg-icon navigation-overlay__svg" aria-hidden="true">
248 <use xlink:href="/dist/icons/icons.svg#arrow-right"></use>
249 </svg>
250 </span>
251 </button>
252 }else{
253 <a href="@(SearchEngineFriendlyURLs.GetFriendlyUrl(node.ID))" class="h5 @(baseClass)__link-level-1">@node.Title
254 <span class="navigation-overlay__arrow">
255 <svg class="svg-icon navigation-overlay__svg" aria-hidden="true">
256 <use xlink:href="/dist/icons/icons.svg#arrow-right"></use>
257 </svg>
258 </span>
259 </a>
260 }
261 }
262
263 @if(navigationType == "desktop2" || navigationType == "mobile"){
264 if (hasChildren)
265 {
266 <ul class="@(baseClass)__sub-list">
267 <li class="@(baseClass)__item-level-2">
268 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(node.ID)" class="@(baseClass)__link-level-2">@node.Title</a>
269 </li>
270 @foreach (var grandChild in children)
271 {
272 var pageLeve2Active = currentContentItemPathIds.FirstOrDefault(x => x == grandChild.ID) != 0;
273 var classLevel2Active = pageLeve2Active ? "navigation-desktop__item-level-2--active" : "";
274 var classLevel2ActiveMobile = pageLeve2Active ? "--active" : "";
275
276 <li class="@(baseClass)__item-level-2@(classLevel2ActiveMobile) @classLevel2Active">
277 <a href="@SearchEngineFriendlyURLs.GetFriendlyUrl(grandChild.ID)" class="@(baseClass)__link-level-2">@grandChild.Title</a>
278 </li>
279 }
280 </ul>
281 }
282 }
283
284 </li>
285 listCount++;
286 }
287 }
288 *@
289 @TemplateHelper.RenderPartial("Master/Partials/Breadcrumb.cshtml")
290 @using System.Collections.Specialized
291 @using Dynamicweb.Indexing.Querying
292 @using System.Web
293 @using Dynamicweb.Environment.Web
294 @using Query = Dynamicweb.Content.Items.Queries.Query
295 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>>
296
297
298
299 @{
300 string prodQueryString = "PROD";
301 NameValueCollection query = HttpContext.Current.Request.QueryString;
302 string queryProductId = query["productid"];
303 }
304
305 @if (queryProductId != null && queryProductId.Contains(prodQueryString))
306 {
307 <main id="productview">@GetValue("DwContent(productview)")</main>
308 }
309 else
310 {
311 <main id="content">@GetValue("DwContent(content)")</main>
312 }
313 @TemplateHelper.RenderPartial("Master/Partials/SearchOverlay.cshtml")
314
315 @TemplateHelper.RenderPartial("Master/Partials/GlobalFooter.cshtml", new GlobalFooterViewModel(Pageview))
316
317 <script defer="" src="@TemplateHelper.GetRevisionNumber(pathToJsManifest)"></script>
318 <script defer="" src="@TemplateHelper.GetRevisionNumber(pathToJsVendor)"></script>
319 <script defer="" src="@TemplateHelper.GetRevisionNumber(pathToJsApp)"></script>
320 @TemplateHelper.RenderPartial("Master/Partials/GlobalSchema.cshtml")
321 </body>
322 </html>
323