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); } }
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); } }
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()); }
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); }
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()); }
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()); }
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()); } }
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()); }
/// <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()); } }
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); } }
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); }
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()); }
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()); }
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" ); }
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()); }
//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()); }
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()); }
/// <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)); } }
/// <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()); } }
/// <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()); } }
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); }
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" ); }
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); }
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()); }
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 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 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); }