public void Render(ViewContext viewContext, TextWriter writer)
        {
            object instance = Activator.CreateInstance(_type);

            WebViewPage webViewPage = instance as WebViewPage;

            if (webViewPage == null)
            {
                throw new InvalidOperationException("Invalid view type");
            }

            webViewPage.VirtualPath = _virtualPath;
            webViewPage.ViewContext = viewContext;
            webViewPage.ViewData    = viewContext.ViewData;
            webViewPage.InitHelpers();

            WebPageRenderingBase startPage = null;

            if (this.RunViewStartPages)
            {
                startPage = StartPage.GetStartPage(webViewPage, "_ViewStart", ViewStartFileExtensions);
            }

            var pageContext = new WebPageContext(viewContext.HttpContext, webViewPage, null);

            webViewPage.ExecutePageHierarchy(pageContext, writer, startPage);
        }
        public void Render(ViewContext viewContext, TextWriter writer)
        {
            WebViewPage webViewPage = _viewPageActivator.Create(viewContext.Controller.ControllerContext, _type) as WebViewPage;

            if (webViewPage == null)
            {
                throw new InvalidOperationException("Invalid view type");
            }

            if (!String.IsNullOrEmpty(_masterPath))
            {
                _overriddenLayoutSetter.Value(webViewPage, _masterPath);
            }

            webViewPage.VirtualPath = _virtualPath;
            webViewPage.ViewContext = viewContext;
            webViewPage.ViewData    = viewContext.ViewData;
            webViewPage.InitHelpers();

            WebPageRenderingBase startPage = null;

            if (this.RunViewStartPages)
            {
                startPage = StartPage.GetStartPage(webViewPage, "_ViewStart", ViewStartFileExtensions);
            }

            var pageContext = new WebPageContext(viewContext.HttpContext, webViewPage, null);

            webViewPage.ExecutePageHierarchy(pageContext, writer, startPage);
        }
        void IView.Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            webViewPage.VirtualPath = virtualPath;
            webViewPage.ViewContext = viewContext;
            webViewPage.ViewData    = viewContext.ViewData;

            WebPageRenderingBase startPage = StartPage.GetStartPage(webViewPage, "_ViewStart", FileExtensions);

            webViewPage.ExecutePageHierarchy(new WebPageContext(context: viewContext.HttpContext, page: null, model: null), writer, startPage);
        }
Exemple #4
0
        public void Render(ViewContext viewContext, TextWriter writer)
        {
            var webPageContext = new System.Web.WebPages.WebPageContext(
                controllerContext.HttpContext,
                viewPage,
                viewContext.ViewData.Model);

            viewPage.ExecutePageHierarchy(
                webPageContext,
                writer);
        }
Exemple #5
0
        public void Render(ViewContext viewContext, TextWriter writer)
        {
            Type        viewType = BuildManager.GetCompiledType(this.ViewPath);
            object      instance = Activator.CreateInstance(viewType);
            WebViewPage page     = (WebViewPage)instance as WebViewPage;

            page.VirtualPath = this.ViewPath;
            page.ViewContext = viewContext;
            page.ViewData    = viewContext.ViewData;
            page.InitHelpers();
            WebPageContext       pageContext = new WebPageContext(viewContext.HttpContext, null, null);
            WebPageRenderingBase startPage   = StartPage.GetStartPage(page, StartPageFile, new string[] { "cshtml", "vbhtml" });

            page.ExecutePageHierarchy(pageContext, writer, startPage);
        }
Exemple #6
0
    public Execute()
    {
        WebPageContext pageContext = new WebPageContext();

        pageContext.View = this;
        pageContext.SectionWriters.Add("MySectionName",
                                       this.Section_MySectionName);
        var writer = HttpContext.Current.Response.Stream.AsTextWriter();

        if (startPage != null)
        {
            startPage.ExecutePageHierarchy(pageContext, writer);
        }
        else
        {
            this.ExecutePageHierarchy(pageContext, writer);
        }
    }
Exemple #7
0
        public void Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            if (string.IsNullOrEmpty(template))
            {
                template = "default";
            }
            string      viewPath = "~/Views/" + template + "/" + viewContext.RouteData.GetRequiredString("controller") + "/" + viewContext.RouteData.GetRequiredString("action") + ".cshtml";
            Type        viewType = BuildManager.GetCompiledType(viewPath);
            WebViewPage page     = Activator.CreateInstance(viewType) as WebViewPage;

            page.Layout      = layout;
            page.VirtualPath = viewPath;
            page.ViewContext = viewContext;
            page.ViewData    = viewContext.ViewData;
            page.InitHelpers();
            WebPageContext       pageContext = new WebPageContext(viewContext.HttpContext, null, null);
            WebPageRenderingBase startPage   = StartPage.GetStartPage(page, "_ViewStart", new string[] { "cshtml", "vbhtml" });

            page.ExecutePageHierarchy(pageContext, writer, startPage);
        }
        public void Render(ViewContext viewContext, TextWriter writer)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (page == null)
            {
                throw new InvalidOperationException("Cannot create a page from " + viewPath);
            }
            //damn, now why is this internal, how can you ever reuse the webviewpage then??
            //page.OverridenLayoutPath = this.LayoutPath;
            if (!String.IsNullOrEmpty(this.LayoutPath))
            {
                page.Layout = LayoutPath;
            }

            page.VirtualPath = viewPath;
            page.ViewContext = viewContext;
            page.ViewData    = viewContext.ViewData;
            page.InitHelpers();
            WebPageRenderingBase startPage = null;

            if (this.RunViewStartPages)
            {
                startPage = this.StartPageLookup(page, VirtualPathFactoryManagerViewEngine.ViewStartFileName, this.ViewStartFileExtensions);
            }
            var httpContext            = viewContext.HttpContext;
            WebPageRenderingBase base4 = null;
            object model = null;

            //instead of page.OverridenLayoutPath:
            if (!String.IsNullOrEmpty(this.LayoutPath))
            {
                page.Layout = LayoutPath;
            }

            page.ExecutePageHierarchy(new WebPageContext(httpContext, base4, model), writer, startPage);
        }
Exemple #9
0
    public static RazorViewExecutionResult ExecuteTemplate(WebViewPage <T> viewPage, T model, HttpContextBase httpContext)
    {
        var result = new RazorViewExecutionResult();

        // Warning: lots of mocking below

        // mock HTTP state objects
        var context = new Mock <HttpContextBase>();

        context.Setup(x => x.Items).Returns(new Dictionary <object, object>());
        var response = new Mock <HttpResponseBase>();

        response.Setup(x => x.ApplyAppPathModifier(It.IsAny <string>()))
        .Returns(new Func <string, string>(x => x));
        context.Setup(x => x.Response).Returns(response.Object);
        var request = new Mock <HttpRequestBase>();

        context.Setup(x => x.Request).Returns(request.Object);
        request.Setup(x => x.ApplicationPath).Returns("/");
        request.Setup(x => x.IsLocal).Returns(true);
        var requestRouteContext = new RequestContext(context.Object, new RouteData());
        // mock page view context
        var view = new Mock <ViewContext>();

        view.Setup(x => x.HttpContext).Returns(context.Object);
        var viewMock = new Mock <IView>();

        view.Setup(x => x.View).Returns(viewMock.Object);
        view.Setup(x => x.TempData).Returns(new TempDataDictionary());
        view.Setup(x => x.ViewData).Returns(new ViewDataDictionary <T>(model));
        var viewDataContainer = new Mock <IViewDataContainer>();

        // mock view data used by the page
        viewDataContainer.Setup(c => c.ViewData).Returns(new ViewDataDictionary <T>(model));
        // mock html helper
        var html      = new Mock <HtmlHelper <T> >(view.Object, viewDataContainer.Object);
        var urlHelper = new Mock <UrlHelper>(requestRouteContext);
        // mock viewengine (for partial views fake resolution)
        var viewEngine = new Mock <IViewEngine>();

        viewEngine.Setup(x => x.FindPartialView(
                             It.IsAny <ControllerContext>(),
                             It.IsAny <string>(),
                             It.IsAny <bool>()))
        .Returns(new ViewEngineResult(viewMock.Object, viewEngine.Object));
        using (var tw = new StringWriter())
            using (var twNull = new StringWriter()) // this writer is used to discard unnecessary results
            {
                view.Setup(x => x.Writer).Returns(tw);

                // inject mocked context
                viewPage.Context = httpContext;

                var pageContext = new WebPageContext(context: context.Object, page: null, model: null);
                viewPage.ViewContext = view.Object;
                if (model != null)
                {
                    viewPage.ViewData = new ViewDataDictionary <T>(model);
                }

                viewPage.Html = html.Object;
                viewPage.Url  = urlHelper.Object;

                // insert mocked viewEngine for fake partial views resolution
                ViewEngines.Engines.Clear();
                ViewEngines.Engines.Add(viewEngine.Object);

                // prepare view for execution, discard all generated results
                viewPage.PushContext(pageContext, twNull);
                viewPage.ExecutePageHierarchy(pageContext, twNull);
                // inject textwriter
                viewPage.OutputStack.Push(tw);
                // execute compiled page
                viewPage.Execute();

                // find all sections and render them too
                var dynMethod = pageContext.GetType().GetProperty("SectionWritersStack", BindingFlags.NonPublic | BindingFlags.Instance);
                var res       = (Stack <Dictionary <string, SectionWriter> >)dynMethod.GetValue(pageContext, null);
                foreach (var section in res.Peek())
                {
                    section.Value();
                    result.SectionNames.Add(section.Key);
                }

                result.Text = tw.ToString();
                return(result);
            }
    }