public void AttachToPage(Page renderTarget, PageContentToRender contentToRender) { _aspnetPage = renderTarget; _job = contentToRender; _aspnetPage.Init += RendererPage; }
public void AttachToPage(Page aspnetPage, PageContentToRender contentToRender) { Verify.ArgumentNotNull(aspnetPage, "aspnetPage"); Verify.ArgumentNotNull(contentToRender, "contentToRender"); aspnetPage.Items.Add(PageRenderingJob_Key, contentToRender); Guid templateId = contentToRender.Page.TemplateId; var rendering = _renderingInfo[templateId]; if (rendering == null) { Exception loadingException = _loadingExceptions[templateId]; if (loadingException != null) { throw loadingException; } Verify.ThrowInvalidOperationException("Failed to get master page by template ID '{0}'. Check for compilation errors".FormatWith(templateId)); } aspnetPage.MasterPageFile = rendering.VirtualPath; aspnetPage.PreRender += (e, args) => PageOnPreRender(aspnetPage, contentToRender.Page); var master = aspnetPage.Master as MasterPagePageTemplate; TemplateDefinitionHelper.BindPlaceholders(master, contentToRender, rendering.PlaceholderProperties, null); }
public XDocument Render(PageContentToRender contentToRender, FunctionContextContainer functionContextContainer) { var document = TemplateInfo.GetTemplateDocument(contentToRender.Page.TemplateId); PageRenderer.ResolvePlaceholders(document, contentToRender.Contents); return(document); }
public XDocument Render(PageContentToRender contentToRender, FunctionContextContainer functionContextContainer) { Guid templateId = contentToRender.Page.TemplateId; var renderingInfo = _renderingInfo[templateId]; if (renderingInfo == null) { Exception loadingException = _loadingExceptions[templateId]; if (loadingException != null) { throw loadingException; } Verify.ThrowInvalidOperationException($"Missing template '{templateId}'"); } string output; RazorPageTemplate webPage = null; try { webPage = WebPageBase.CreateInstanceFromVirtualPath(renderingInfo.ControlVirtualPath) as RazorPageTemplate; Verify.IsNotNull(webPage, "Razor compilation failed or base type does not inherit '{0}'", typeof(RazorPageTemplate).FullName); webPage.Configure(); using (Profiler.Measure("Evaluating placeholders")) { TemplateDefinitionHelper.BindPlaceholders(webPage, contentToRender, renderingInfo.PlaceholderProperties, functionContextContainer); } // Executing razor code var httpContext = new HttpContextWrapper(HttpContext.Current); var startPage = StartPage.GetStartPage(webPage, "_PageStart", new[] { "cshtml" }); var pageContext = new WebPageContext(httpContext, webPage, startPage); pageContext.PageData.Add(RazorHelper.PageContext_FunctionContextContainer, functionContextContainer); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { using (Profiler.Measure("Executing Razor page template")) { webPage.ExecutePageHierarchy(pageContext, writer); } } output = sb.ToString(); } finally { webPage?.Dispose(); } return(XDocument.Parse(output)); }
public void AttachToPage(Page renderTarget, PageContentToRender contentToRender) { _renderTarget = renderTarget; _writer = new StringWriter(); var pageUrl = PageUrls.BuildUrl(contentToRender.Page); var pageUri = new Uri(renderTarget.Request.Url, pageUrl); var httpRequest = new HttpRequest(null, pageUri.OriginalString, ""); var httpResponse = new HttpResponse(_writer); var httpContext = new HttpContext(httpRequest, httpResponse); var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); if (routeData == null || routeData.RouteHandler == null) { renderTarget.Init += Renderer_NoRoute; } else { var requestContext = new RequestContext(new HttpContextWrapper(httpContext), routeData); var handler = routeData.RouteHandler.GetHttpHandler(requestContext); if (handler == null) { renderTarget.Init += Renderer_NoRoute; } else { httpContext.Items.Add("C1PreviewContent", contentToRender.Contents); handler.ProcessRequest(httpContext); renderTarget.Init += Renderer; } } }
private void InitializeFromHttpContextInternal() { HttpContext httpContext = HttpContext.Current; var request = httpContext.Request; var response = httpContext.Response; ProfilingEnabled = request.Url.OriginalString.Contains("c1mode=perf"); if (ProfilingEnabled) { if (!UserValidationFacade.IsLoggedIn()) { string loginUrl = GetLoginRedirectUrl(request.RawUrl); response.Write(@"You must be logged into <a href=""" + loginUrl + @""">C1 console</a> to have the performance view enabled"); response.End(); // throws ThreadAbortException return; } Profiler.BeginProfiling(); _pagePerfMeasuring = Profiler.Measure("C1 Page"); } _previewKey = request.QueryString["previewKey"]; PreviewMode = !_previewKey.IsNullOrEmpty(); if (PreviewMode) { Page = (IPage)HttpRuntime.Cache.Get(_previewKey + "_SelectedPage"); C1PageRoute.PageUrlData = new PageUrlData(Page); PageRenderer.RenderingReason = (RenderingReason)HttpRuntime.Cache.Get(_previewKey + "_RenderingReason"); } else { PageUrlData pageUrl = C1PageRoute.PageUrlData ?? PageUrls.UrlProvider.ParseInternalUrl(request.Url.OriginalString); Page = pageUrl.GetPage(); _cachedUrl = request.Url.PathAndQuery; PageRenderer.RenderingReason = new UrlSpace(httpContext).ForceRelativeUrls ? RenderingReason.C1ConsoleBrowserPageView : RenderingReason.PageView; } ValidateViewUnpublishedRequest(httpContext); if (Page == null) { throw new HttpException(404, "Page not found - either this page has not been published yet or it has been deleted."); } if (Page.DataSourceId.PublicationScope != PublicationScope.Published) { response.Cache.SetCacheability(HttpCacheability.NoCache); CachingDisabled = true; } PageRenderer.CurrentPage = Page; _dataScope = new DataScope(Page.DataSourceId.PublicationScope, Page.DataSourceId.LocaleScope); var pagePlaceholderContents = GetPagePlaceholderContents(); var pageRenderingJob = new PageContentToRender(Page, pagePlaceholderContents, PreviewMode); Verify.IsNotNull(httpContext.Handler, "HttpHandler isn't defined"); var aspnetPage = (System.Web.UI.Page)httpContext.Handler; var pageRenderer = PageTemplateFacade.BuildPageRenderer(Page.TemplateId); pageRenderer.AttachToPage(aspnetPage, pageRenderingJob); }
private void InitializeFromHttpContextInternal() { HttpContext httpContext = HttpContext.Current; var request = httpContext.Request; var response = httpContext.Response; ProfilingEnabled = request.Url.OriginalString.Contains("c1mode=perf"); if (ProfilingEnabled) { if (!UserValidationFacade.IsLoggedIn()) { string loginUrl = GetLoginRedirectUrl(request.RawUrl); response.Write(@"You must be logged into <a href=""" + loginUrl + @""">C1 console</a> to have the performance view enabled"); response.End(); // throws ThreadAbortException return; } Profiler.BeginProfiling(); _pagePerfMeasuring = Profiler.Measure("C1 Page"); } PreviewMode = PagePreviewContext.TryGetPreviewKey(request, out _previewKey); if (PreviewMode) { Page = PagePreviewContext.GetPage(_previewKey); C1PageRoute.PageUrlData = new PageUrlData(Page); PageRenderer.RenderingReason = PagePreviewContext.GetRenderingReason(_previewKey); } else { PageUrlData pageUrl = C1PageRoute.PageUrlData ?? PageUrls.UrlProvider.ParseInternalUrl(request.Url.OriginalString); Page = pageUrl.GetPage(); _cachedUrl = request.Url.PathAndQuery; PageRenderer.RenderingReason = new UrlSpace(httpContext).ForceRelativeUrls ? RenderingReason.C1ConsoleBrowserPageView : RenderingReason.PageView; } ValidateViewUnpublishedRequest(httpContext); if (Page == null) { throw new HttpException(404, "Page not found - either this page has not been published yet or it has been deleted."); } if (Page.DataSourceId.PublicationScope != PublicationScope.Published) { response.Cache.SetCacheability(HttpCacheability.NoCache); CachingDisabled = true; } PageRenderer.CurrentPage = Page; var culture = Page.DataSourceId.LocaleScope; _dataScope = new DataScope(Page.DataSourceId.PublicationScope, culture); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; var pagePlaceholderContents = GetPagePlaceholderContents(); PageContentToRender = new PageContentToRender(Page, pagePlaceholderContents, PreviewMode); AttachRendererToAspNetPage(httpContext); }