Exemplo n.º 1
0
        private string Render(string template, ViewContext context)
        {
            var guid     = Guid.NewGuid();
            var path     = "~/Views/Shared/" + guid + ".cshtml";
            var fullPath = context.HttpContext.Server.MapPath(path);

            try
            {
                using (var fs = File.Create(fullPath))
                {
                    using (var txtWriter = new StreamWriter(fs))
                    {
                        txtWriter.WriteLine(template);
                    }
                }

                using (var st = new StringWriter())
                {
                    var razor = new RazorView(context.Controller.ControllerContext, path, null, false, null);
                    razor.Render(new ViewContext(context.Controller.ControllerContext, razor, context.ViewData, context.TempData, st), st);

                    return(st.ToString());
                }
            }
            catch
            {
                return(template);
            }
            finally
            {
                File.Delete(fullPath);
            }
        }
Exemplo n.º 2
0
 public string RenderViewToString(Controller controller, string viewName, string viewRoute, object model)
 {
     controller.ControllerContext = new ControllerContext();
     controller.ViewData.Model    = model;
     try
     {
         using (var sw = new StringWriter())
         {
             HttpContext.Current = new HttpContext(
                 new HttpRequest("", "http://localhost:54802", ""),
                 new HttpResponse(new StringWriter())
                 );
             var context           = new HttpContextWrapper(HttpContext.Current);
             var routeData         = new RouteData();
             var controllerContext = new ControllerContext(new RequestContext(context, routeData), controller);
             var razor             = new RazorView(controllerContext, viewRoute, null, false, null);
             var viewContext       = new ViewContext(controller.ControllerContext, razor, controller.ViewData, controller.TempData, sw);
             razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), sw), sw);
             return(sw.ToString());
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public void RenderWithViewPageAndNoStartPageLookupRendersView()
        {
            // Arrange
            StubWebViewPage    viewPage        = new StubWebViewPage();
            Mock <ViewContext> viewContextMock = new Mock <ViewContext>();

            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary <object, object>());
            viewContextMock.Setup(vc => vc.HttpContext.Request.IsLocal).Returns(false);
            MockBuildManager          buildManager      = new MockBuildManager("~/viewPath", typeof(object));
            Mock <IViewPageActivator> activator         = new Mock <IViewPageActivator>(MockBehavior.Strict);
            ControllerContext         controllerContext = new ControllerContext();

            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", null, false, Enumerable.Empty <string>(), activator.Object);

            view.StartPageLookup = (WebPageRenderingBase p, string n, IEnumerable <string> e) =>
            {
                Assert.True(false, "ViewStart page lookup should not be called");
                return(null);
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock <TextWriter>().Object);

            // Assert
            Assert.Null(viewPage.Layout);
            Assert.Equal("", viewPage.OverridenLayoutPath);
            Assert.Same(viewContextMock.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }
        public void RenderWithViewPageAndStartPageLookupExecutesStartPage()
        {
            // Arrange
            StubWebViewPage    viewPage        = new StubWebViewPage();
            Mock <ViewContext> viewContextMock = new Mock <ViewContext>();

            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary <object, object>());
            MockBuildManager          buildManager      = new MockBuildManager("~/viewPath", typeof(object));
            Mock <IViewPageActivator> activator         = new Mock <IViewPageActivator>(MockBehavior.Strict);
            ControllerContext         controllerContext = new ControllerContext();

            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView            view      = new RazorView(controllerContext, "~/viewPath", null, true, new[] { "cshtml" }, activator.Object);
            Mock <ViewStartPage> startPage = new Mock <ViewStartPage>();

            startPage.Setup(sp => sp.ExecutePageHierarchy()).Verifiable();
            view.StartPageLookup = (WebPageRenderingBase page, string fileName, IEnumerable <string> extensions) =>
            {
                Assert.Equal(viewPage, page);
                Assert.Equal("_ViewStart", fileName);
                Assert.Equal(new[] { "cshtml" }, extensions.ToArray());
                return(startPage.Object);
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock <TextWriter>().Object);

            // Assert
            startPage.Verify(sp => sp.ExecutePageHierarchy(), Times.Once());
        }
        /// <summary>
        /// 执行请求
        /// </summary>
        /// <param name="httpContext"></param>
        public void Invoke(HttpContext httpContext)
        {
            // 1、加载Controller
            endpointRouteBuilder.MapController();//扫描所有controller

            //路由匹配endpoint
            Endpoint endpoint = endpointRoute.Match("/index");

            //执行endpoint
            object result = endpointHandler.HandlerEndpoint(endpoint, new object[] { "原理解析" });

            //处理结果
            ViewResult viewResult = (ViewResult)result;


            //输出到页面
            if (viewResult.ViewType.Equals("Razor"))
            {
                AbstractView razorView = new RazorView();
                razorView.Render(viewResult.ViewData, httpContext);
            }
            else if (viewResult.ViewType.Equals("Xml"))
            {
                AbstractView xmlView = new XMLView();
                xmlView.Render(viewResult.ViewData, httpContext);
            }
        }
Exemplo n.º 6
0
        public static string Render(string viewName, object model, IPublishedContent currentContent)
        {
            var viewPath = Path.Combine(EmailViewPath, viewName);
            var viewFile = new FileInfo(HostingEnvironment.MapPath(viewPath));

            if (viewFile.Exists == false)
            {
                return(null);
            }
            var writer    = new StringWriter();
            var context   = new HttpContextWrapper(HttpContext.Current);
            var routeData = new RouteData();

            routeData.Values["controller"] = "FakeController";
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, viewPath, null, false, null);
            var viewData          = new ViewDataDictionary(model)
            {
                // pass the current content to the email template, because Umbraco.AssignedContentItem doesn't work out of Umbraco context
                //["currentContent"] = currentContent,
            };

            razor.Render(new ViewContext(controllerContext, razor, viewData, new TempDataDictionary(), writer), writer);
            return(writer.ToString());
        }
Exemplo n.º 7
0
        public void RenderWithViewPageAndLayoutPageRendersView()
        {
            // Arrange
            StubWebViewPage        viewPage    = new StubWebViewPage();
            Mock <ViewContext>     viewContext = new Mock <ViewContext>();
            Mock <HttpContextBase> httpContext = new Mock <HttpContextBase>();
            Mock <HttpRequestBase> httpRequest = new Mock <HttpRequestBase>();

            httpRequest.SetupGet(r => r.IsLocal).Returns(false);
            httpRequest.SetupGet(r => r.Browser.IsMobileDevice).Returns(false);
            httpRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());

            httpContext.SetupGet(c => c.Request).Returns(httpRequest.Object);
            httpContext.SetupGet(c => c.Response.Cookies).Returns(new HttpCookieCollection());
            httpContext.SetupGet(c => c.Items).Returns(new Hashtable());

            viewContext.SetupGet(v => v.HttpContext).Returns(httpContext.Object);

            MockBuildManager          buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock <IViewPageActivator> activator    = new Mock <IViewPageActivator>(MockBehavior.Strict);

            Mock <WebPage> layoutPage = new Mock <WebPage> {
                CallBase = true
            };

            layoutPage.Setup(c => c.Execute()).Callback(() => layoutPage.Object.RenderBody());
            Mock <IVirtualPathFactory> virtualPathFactory = new Mock <IVirtualPathFactory>(
                MockBehavior.Strict
                );

            virtualPathFactory.Setup(f => f.Exists("~/layoutPath")).Returns(true);
            virtualPathFactory
            .Setup(f => f.CreateInstance("~/layoutPath"))
            .Returns(layoutPage.Object);
            ControllerContext controllerContext = new ControllerContext();

            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(
                controllerContext,
                "~/viewPath",
                "~/layoutPath",
                false,
                Enumerable.Empty <string>(),
                activator.Object
                );

            view.BuildManager        = buildManager;
            view.VirtualPathFactory  = virtualPathFactory.Object;
            view.DisplayModeProvider = DisplayModeProvider.Instance;

            // Act
            view.Render(viewContext.Object, TextWriter.Null);

            // Assert
            Assert.Equal("~/layoutPath", viewPage.Layout);
            Assert.Equal("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.Same(viewContext.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }
Exemplo n.º 8
0
        public static string RenderViewToString(string controlPath, ViewDataDictionary data)
        {
            var renderer = Dependency.TryResolve <ITemplateRenderer>();

            if (renderer != null)
            {
                return(renderer.Render(controlPath, data));
            }

            StringBuilder sb = new StringBuilder();

            if (controlPath != null && controlPath.EndsWith(".cshtml", System.StringComparison.InvariantCultureIgnoreCase))
            {
                data = data ?? new ViewDataDictionary(new Dictionary <string, object>());
                var httpBase = new HttpContextWrapper(HttpContext.Current);

                var controller = new FakeController();
                var route      = new RouteData();
                route.Values.Add("controller", "something");
                var controllerContext = new ControllerContext(httpBase, route, controller);

                var actualPath = controlPath;
                if (actualPath.StartsWith("~/"))
                {
                    actualPath = Path.Combine(HostingEnvironment.ApplicationPhysicalPath,
                                              actualPath.Substring(2).Replace("/", "\\"));
                }

                if (!File.Exists(actualPath))
                {
                    throw new ArgumentOutOfRangeException("controlPath", String.Format("controlPath: {0}", actualPath));
                }

                var view = new RazorView(controllerContext, controlPath, null, false, null, null);
                using (StringWriter sw = new StringWriter(sb))
                {
                    var viewContext = new ViewContext(controllerContext, view, data, new TempDataDictionary(), sw);
                    view.Render(viewContext, sw);
                }
            }
            else
            {
                ViewPage vp = new ViewPage {
                    ViewData = data
                };
                Control control = vp.LoadControl(controlPath);
                vp.Controls.Add(control);
                using (StringWriter sw = new StringWriter(sb))
                    using (HtmlTextWriter tw = new HtmlTextWriter(sw))
                    {
                        vp.RenderControl(tw);
                    }
            }

            return(sb.ToString());
        }
Exemplo n.º 9
0
        public static string GetRazorViewAsString(object model, string filePath, ControllerContext controller)
        {
            StringWriter       stringWriter      = new StringWriter();
            HttpContextWrapper context           = new HttpContextWrapper(HttpContext.Current);
            ControllerContext  controllerContext = GetControllerContext();
            RazorView          razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), stringWriter), stringWriter);
            return(stringWriter.ToString());
        }
        public static string RenderPartialToString(string viewName)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, viewName, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(new { }), new TempDataDictionary(), st), st);
            return(st.ToString());
        }
Exemplo n.º 11
0
        public static string RazorViewRender(object model, string filePath)
        {
            var sw                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new HomeController());
            var razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), sw), sw);
            return(sw.ToString());
        }
        private string Render(ControllerContext controllerContext, RazorView view, object model)
        {
            //http://forums.asp.net/t/1888849.aspx?Render+PartialView+without+ControllerContext
            //https://weblog.west-wind.com/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String

            using (var writer = new StringWriter())
            {
                view.Render(new ViewContext(controllerContext, view, new ViewDataDictionary(model), new TempDataDictionary(), writer), writer);
                return(writer.ToString());
            }
        }
Exemplo n.º 13
0
        public static string GetRazorViewAsString(object model, string filePath)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current ?? new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null)));
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
            return(st.ToString());
        }
Exemplo n.º 14
0
 /// <summary>
 /// Convert a partial view to a string
 /// </summary>
 /// <param name="viewName">Absolute path (started by ~)</param>
 /// <param name="model"></param>
 /// <returns></returns>
 public static string RenderView(string viewName, object model)
 {
     using (var st = new StringWriter())
     {
         var context           = new HttpContextWrapper(HttpContext.Current);
         var routeData         = new RouteData();
         var controllerContext = new ControllerContext(new RequestContext(context, routeData), new EmptyController());
         var razor             = new RazorView(controllerContext, viewName, null, false, null);
         razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);
         return(st.ToString());
     }
 }
Exemplo n.º 15
0
        public string SerializeControl(string controlPath, ViewDataDictionary viewData)
        {
            var control = new RazorView(ControllerContext, controlPath, null, false, null);

            using (var stringWriter = new StringWriter())
                using (var writer = new HtmlTextWriter(stringWriter))
                {
                    control.Render(new ViewContext(ControllerContext, control, viewData, TempData, writer), writer);
                    string value = writer.InnerWriter.ToString();
                    return(value);
                }
        }
Exemplo n.º 16
0
        public void Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            var sw = new StringWriter();
            var w  = new HtmlTextWriter(sw);

            originalView.Render(viewContext, w);
            string html = sw.ToString();

            //Injection here
            //html = html.Replace("Contact", "Sta minchia");
            writer.Write(html);
        }
Exemplo n.º 17
0
        public static string GetRazorViewAsString(Controller controller, object model, string viewPath)
        {
            var st                = new StringWriter();
            var context           = new HttpContextWrapper(HttpContext.Current);
            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new ImageController());

            var razor = new RazorView(controllerContext, "~/Frontend-Assembly/Telerik.Sitefinity.Frontend/Mvc{0}".Arrange(viewPath), null, false, null);

            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st), st);

            return(st.ToString());
        }
Exemplo n.º 18
0
        public static string Render(object ViewModel, ControllerContext controller, string path)
        {
            var sb = new StringWriter();
            ViewDataDictionary ViewData = new ViewDataDictionary();
            var tempData = new TempDataDictionary();

            ViewData.Model = ViewModel;
            var razor       = new RazorView(controller, path, null, false, null);
            var viewContext = new ViewContext(controller, razor, ViewData, tempData, sb);

            razor.Render(viewContext, sb);
            return(sb.ToString());
        }
Exemplo n.º 19
0
        public static string RenderView(object model, string filePath)
        {
            using (var oWriter = new StringWriter())
            {
                var context           = new HttpContextWrapper(HttpContext.Current);
                var routeData         = new RouteData();
                var controllerContext = new ControllerContext(new RequestContext(context, routeData), new EmptyController());
                var razor             = new RazorView(controllerContext, filePath, null, false, null);
                razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), oWriter), oWriter);

                return(oWriter.GetStringBuilder().ToString());
            }
        }
        public void RenderWithUnsupportedTypeThrows()
        {
            // Arrange
            ViewContext      context          = new Mock <ViewContext>().Object;
            MockBuildManager buildManagerMock = new MockBuildManager("view path", typeof(object));
            RazorView        view             = new RazorView(new ControllerContext(), "view path", null, false, Enumerable.Empty <string>());

            view.BuildManager = buildManagerMock;

            // Act & Assert
            Assert.Throws <InvalidOperationException>(
                () => view.Render(context, new Mock <TextWriter>().Object),
                "The view at 'view path' must derive from WebViewPage, or WebViewPage<TModel>."
                );
        }
        public void RenderWithNullWriterThrows()
        {
            // Arrange
            RazorView          view            = new RazorView(new ControllerContext(), "~/viewPath", null, false, Enumerable.Empty <string>());
            Mock <ViewContext> viewContextMock = new Mock <ViewContext>();

            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));

            view.BuildManager = buildManager;

            // Act & Assert
            Assert.ThrowsArgumentNull(
                () => view.Render(viewContextMock.Object, null),
                "writer"
                );
        }
Exemplo n.º 22
0
        private string RenderView <TModel>(string viewPath, TModel model, TempDataDictionary tempData = null)
        {
            var view = new RazorView(
                ControllerContext,
                viewPath: viewPath,
                layoutPath: null,
                runViewStartPages: false,
                viewStartFileExtensions: null
                );

            var writer      = new StringWriter();
            var viewContext = new ViewContext(ControllerContext, view, new ViewDataDictionary <TModel>(model), tempData ?? new TempDataDictionary(), writer);

            view.Render(viewContext, writer);
            return(writer.ToString());
        }
Exemplo n.º 23
0
        //internals
        private static string RenderPartialToString(string filePath, object model)
        {
            HttpContext httpContext = MockContext.FakeHttpContext();

            var st      = new StringWriter();
            var context = new HttpContextWrapper(httpContext);

            var routeData         = new RouteData();
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, filePath, null, false, null);

            razor.Render(
                new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st),
                st);
            return(st.ToString());
        }
Exemplo n.º 24
0
        public static string RenderHtml <T>(this ControllerContext context, string viewPath, T viewModel, TempDataDictionary viewBag)
        {
            var view = new RazorView(context, viewPath, null, false, null);

            viewBag = viewBag ?? new TempDataDictionary();
            var sb = new StringBuilder();

            using (var writer = new StringWriter(sb))
            {
                var data        = new ViewDataDictionary <T>(viewModel);
                var viewContext = new ViewContext(context, view, data, viewBag, writer);
                view.Render(viewContext, writer);
                writer.Flush();
            }
            return(sb.ToString());
        }
        public static string GetRazorViewAsString(string viewPath, object model)
        {
            var st          = new StringWriter();
            var httpContext = HttpContext.Current ??
                              new HttpContext(new HttpRequest(String.Empty, "http://dummy.com", String.Empty),
                                              new HttpResponse(new StringWriter()));
            var context   = new HttpContextWrapper(httpContext);
            var routeData = new RouteData();

            routeData.Values["Controller"] = nameof(FakeController);
            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new FakeController());
            var razor             = new RazorView(controllerContext, viewPath, null, false, null);

            razor.Render(
                new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st),
                st);
            return(st.ToString());
        }
Exemplo n.º 26
0
        /// <summary>
        ///     Populates a view with a model
        /// </summary>
        /// <param name="model">The data model to populate the view with</param>
        /// <param name="view">The view to be populated</param>
        /// <returns>An HTML string</returns>
        public static string ParseRazorViewString(object model, string view)
        {
            Guid   guid     = Guid.NewGuid();
            string filePath = AppDomain.CurrentDomain.BaseDirectory + guid + ".cshtml";

            File.WriteAllText(filePath, $"@inherits System.Web.Mvc.WebViewPage<{model.GetType().FullName}>\r\n {view}");
            StringWriter       st                = new StringWriter();
            HttpContextWrapper context           = new HttpContextWrapper(HttpContext.Current);
            RouteData          routeData         = new RouteData();
            ControllerContext  controllerContext =
                new ControllerContext(new RequestContext(context, routeData), new FakeController());
            RazorView razor = new RazorView(controllerContext, "~/" + guid + ".cshtml", null, false, null);

            razor.Render(
                new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), st),
                st);
            File.Delete(filePath);
            return(st.ToString());
        }
        private static void RenderCustomErrorView(HttpApplication httpApplication, string viewPath,
                                                  HttpStatusCode httpStatusCode,
                                                  Exception currentError)
        {
            try
            {
                // We need to render the view now.
                // This means we need a viewContext ... which requires a controller.
                // So we instantiate a fake controller which does nothing
                // and then work our way to rendering the view.
                var errorController   = new FakeErrorController();
                var controllerContext =
                    new ControllerContext(httpApplication.Context.Request.RequestContext, errorController);
                var view      = new RazorView(controllerContext, viewPath, null, false, null);
                var viewModel = new ErrorViewModel
                {
                    Exception = currentError
                };
                var tempData    = new TempDataDictionary();
                var viewContext = new ViewContext(controllerContext, view,
                                                  new ViewDataDictionary(viewModel), tempData,
                                                  httpApplication.Response.Output);
                view.Render(viewContext, httpApplication.Response.Output);

                // Lets make sure we set the correct Error Status code :)
                httpApplication.Response.StatusCode = (int)httpStatusCode;
            }
            catch (Exception exception)
            {
                // Damn it! Something -really- crap just happened.
                // eg. the path to the redirect might not exist, etc.
                string errorMessage =
                    string.Format(
                        "An error occured while trying to Render the custom error view which you provided, for this HttpStatusCode. ViewPath: {0}; Message: {1}",
                        string.IsNullOrEmpty(viewPath) ? "--no view path was provided!! --" : viewPath,
                        exception.Message);

                RenderFallBackErrorViewBecauseNoneWasProvided(httpApplication,
                                                              HttpStatusCode.InternalServerError,
                                                              new InvalidOperationException(errorMessage, currentError));
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// Renders the view and return the string output
        /// </summary>
        /// <returns></returns>
        public string Render()
        {
            RazorViewEngine viewEngine = new RazorViewEngine();

            RazorView view = this.IsPartialView ?
                             new RazorView(this.ControllerContext, this.TemplatePath, null, false, FileExtensions) :
                             new RazorView(this.ControllerContext, this.TemplatePath, this.LayoutPage, true, FileExtensions);

            using (StringWriter writer = new StringWriter())
            {
                ViewContext viewContext = new ViewContext(this.ControllerContext, view, ViewData,
                                                          new TempDataDictionary(), writer);

                // render the view to StringWriter
                view.Render(viewContext, writer);
                viewEngine.ReleaseView(this.ControllerContext, view);

                return(writer.ToString());
            }
        }
Exemplo n.º 29
0
        /// <summary>
        /// The render view to string.
        /// </summary>
        /// <param name="model">
        /// The model.
        /// </param>
        /// <param name="viewPath">
        /// The view path.
        /// </param>
        /// <param name="controllerContext">
        /// The controller Context.
        /// </param>
        /// <param name="escapeHtml">
        /// The escape Html.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string RenderViewToString(
            this object model,
            string viewPath,
            ControllerContext controllerContext,
            bool escapeHtml = true)
        {
            using (var st = new StringWriter())
            {
                var razor = new RazorView(controllerContext, viewPath, null, false, null);

                var viewContext = new ViewContext(
                    controllerContext,
                    razor,
                    new ViewDataDictionary(model),
                    new TempDataDictionary(),
                    st);

                razor.Render(viewContext, st);

                return(escapeHtml ? st.ToString() : st.ToString().HtmlDecode());
            }
        }
Exemplo n.º 30
0
        public void RenderWithViewPageAndLayoutPageRendersView()
        {
            // Arrange
            StubWebViewPage           viewPage          = new StubWebViewPage();
            ViewContext               context           = new Mock <ViewContext>().Object;
            MockBuildManager          buildManager      = new MockBuildManager("~/viewPath", typeof(object));
            Mock <IViewPageActivator> activator         = new Mock <IViewPageActivator>(MockBehavior.Strict);
            ControllerContext         controllerContext = new ControllerContext();

            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", "~/layoutPath", false, Enumerable.Empty <string>(), activator.Object);

            view.BuildManager = buildManager;

            // Act
            view.Render(context, new Mock <TextWriter>().Object);

            // Assert
            Assert.IsNull(viewPage.Layout);
            Assert.AreEqual("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.AreSame(context, viewPage.ViewContext);
            Assert.AreEqual("~/viewPath", viewPage.VirtualPath);
        }
Exemplo n.º 31
0
        public void RenderWithNullWriterThrows()
        {
            // Arrange
            RazorView view = new RazorView(new ControllerContext(), "~/viewPath", null, false, Enumerable.Empty<string>());
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();

            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            view.BuildManager = buildManager;

            // Act & Assert
            Assert.ThrowsArgumentNull(
                () => view.Render(viewContextMock.Object, null),
                "writer"
                );
        }
Exemplo n.º 32
0
        public void RenderWithViewPageAndLayoutPageRendersView()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContext = new Mock<ViewContext>();
            Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>();
            Mock<HttpRequestBase> httpRequest = new Mock<HttpRequestBase>();

            httpRequest.SetupGet(r => r.IsLocal).Returns(false);
            httpRequest.SetupGet(r => r.Browser.IsMobileDevice).Returns(false);
            httpRequest.SetupGet(r => r.Cookies).Returns(new HttpCookieCollection());

            httpContext.SetupGet(c => c.Request).Returns(httpRequest.Object);
            httpContext.SetupGet(c => c.Response.Cookies).Returns(new HttpCookieCollection());
            httpContext.SetupGet(c => c.Items).Returns(new Hashtable());

            viewContext.SetupGet(v => v.HttpContext).Returns(httpContext.Object);

            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);

            Mock<WebPage> layoutPage = new Mock<WebPage> { CallBase = true };
            layoutPage.Setup(c => c.Execute()).Callback(() => layoutPage.Object.RenderBody());
            Mock<IVirtualPathFactory> virtualPathFactory = new Mock<IVirtualPathFactory>(MockBehavior.Strict);
            virtualPathFactory.Setup(f => f.Exists("~/layoutPath")).Returns(true);
            virtualPathFactory.Setup(f => f.CreateInstance("~/layoutPath")).Returns(layoutPage.Object);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", "~/layoutPath", false, Enumerable.Empty<string>(), activator.Object);
            view.BuildManager = buildManager;
            view.VirtualPathFactory = virtualPathFactory.Object;
            view.DisplayModeProvider = DisplayModeProvider.Instance;

            // Act
            view.Render(viewContext.Object, TextWriter.Null);

            // Assert
            Assert.Equal("~/layoutPath", viewPage.Layout);
            Assert.Equal("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.Same(viewContext.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }
Exemplo n.º 33
0
        public void RenderWithViewPageAndStartPageLookupExecutesStartPage()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();
            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary<object, object>());
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", null, true, new[] { "cshtml" }, activator.Object);
            Mock<ViewStartPage> startPage = new Mock<ViewStartPage>();
            startPage.Setup(sp => sp.ExecutePageHierarchy()).Verifiable();
            view.StartPageLookup = (WebPageRenderingBase page, string fileName, IEnumerable<string> extensions) =>
            {
                Assert.Equal(viewPage, page);
                Assert.Equal("_ViewStart", fileName);
                Assert.Equal(new[] { "cshtml" }, extensions.ToArray());
                return startPage.Object;
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock<TextWriter>().Object);

            // Assert
            startPage.Verify(sp => sp.ExecutePageHierarchy(), Times.Once());
        }
Exemplo n.º 34
0
        public void RenderWithViewPageAndNoStartPageLookupRendersView()
        {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            Mock<ViewContext> viewContextMock = new Mock<ViewContext>();
            viewContextMock.Setup(vc => vc.HttpContext.Items).Returns(new Dictionary<object, object>());
            viewContextMock.Setup(vc => vc.HttpContext.Request.IsLocal).Returns(false);
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", null, false, Enumerable.Empty<string>(), activator.Object);
            view.StartPageLookup = (WebPageRenderingBase p, string n, IEnumerable<string> e) =>
            {
                Assert.True(false, "ViewStart page lookup should not be called");
                return null;
            };
            view.BuildManager = buildManager;

            // Act
            view.Render(viewContextMock.Object, new Mock<TextWriter>().Object);

            // Assert
            Assert.Null(viewPage.Layout);
            Assert.Equal("", viewPage.OverridenLayoutPath);
            Assert.Same(viewContextMock.Object, viewPage.ViewContext);
            Assert.Equal("~/viewPath", viewPage.VirtualPath);
        }
Exemplo n.º 35
0
        public void RenderWithUnsupportedTypeThrows()
        {
            // Arrange
            ViewContext context = new Mock<ViewContext>().Object;
            MockBuildManager buildManagerMock = new MockBuildManager("view path", typeof(object));
            RazorView view = new RazorView(new ControllerContext(), "view path", null, false, Enumerable.Empty<string>());
            view.BuildManager = buildManagerMock;

            // Act & Assert
            Assert.Throws<InvalidOperationException>(
                () => view.Render(context, new Mock<TextWriter>().Object),
                "The view at 'view path' must derive from WebViewPage, or WebViewPage<TModel>."
                );
        }
Exemplo n.º 36
0
        public void RenderWithViewPageAndLayoutPageRendersView() {
            // Arrange
            StubWebViewPage viewPage = new StubWebViewPage();
            ViewContext context = new Mock<ViewContext>().Object;
            MockBuildManager buildManager = new MockBuildManager("~/viewPath", typeof(object));
            Mock<IViewPageActivator> activator = new Mock<IViewPageActivator>(MockBehavior.Strict);
            ControllerContext controllerContext = new ControllerContext();
            activator.Setup(l => l.Create(controllerContext, typeof(object))).Returns(viewPage);
            RazorView view = new RazorView(controllerContext, "~/viewPath", "~/layoutPath", false, Enumerable.Empty<string>(), activator.Object);
            view.BuildManager = buildManager;

            // Act
            view.Render(context, new Mock<TextWriter>().Object);

            // Assert
            Assert.IsNull(viewPage.Layout);
            Assert.AreEqual("~/layoutPath", viewPage.OverridenLayoutPath);
            Assert.AreSame(context, viewPage.ViewContext);
            Assert.AreEqual("~/viewPath", viewPage.VirtualPath);
        }