Updating per comments

This commit is contained in:
ianhong 2014-11-12 15:46:38 -08:00
parent 23a7aa813d
commit 0720177243
6 changed files with 184 additions and 176 deletions

View File

@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc.Razor
{
/// <summary>
/// Default implementation for <see cref="IView"/> that executes one or more <see cref="IRazorPage"/>
/// instances as part of view rendering.
/// as parts of its exeuction.
/// </summary>
public class RazorView : IView
{
@ -19,8 +19,6 @@ namespace Microsoft.AspNet.Mvc.Razor
private readonly IRazorPageActivator _pageActivator;
private readonly IViewStartProvider _viewStartProvider;
private IPageExecutionListenerFeature _pageExecutionFeature;
private IRazorPage _razorPage;
private bool _isPartial;
/// <summary>
/// Initializes a new instance of RazorView
@ -28,52 +26,52 @@ namespace Microsoft.AspNet.Mvc.Razor
/// <param name="pageFactory">The page factory used to instantiate layout and _ViewStart pages.</param>
/// <param name="pageActivator">The <see cref="IRazorPageActivator"/> used to activate pages.</param>
/// <param name="viewStartProvider">The <see cref="IViewStartProvider"/> used for discovery of _ViewStart
/// <param name="razorPage">The <see cref="IRazorPage"/> instance to execute.</param>
/// <param name="isPartial">Determines if the view is to be executed as a partial.</param>
/// pages</param>
public RazorView(IRazorPageFactory pageFactory,
IRazorPageActivator pageActivator,
IViewStartProvider viewStartProvider)
IViewStartProvider viewStartProvider,
IRazorPage razorPage,
bool isPartial
)
{
_pageFactory = pageFactory;
_pageActivator = pageActivator;
_viewStartProvider = viewStartProvider;
RazorPage = razorPage;
IsPartial = isPartial;
}
/// <summary>
/// Gets <see cref="IRazorPage"/> instance that the views executes on.
/// </summary>
public IRazorPage RazorPage { get; }
/// <summary>
/// Gets a value that determines if the view is executed as a partial.
/// </summary>
/// <inheritdoc />
public bool IsPartial { get; }
private bool EnableInstrumentation
{
get { return _pageExecutionFeature != null; }
}
/// <summary>
/// Contextualizes the current instance of the <see cref="RazorView"/> providing it with the
/// <see cref="IRazorPage"/> to execute.
/// </summary>
/// <param name="razorPage">The <see cref="IRazorPage"/> instance to execute.</param>
/// <param name="isPartial">Determines if the view is to be executed as a partial.</param>
public virtual void Contextualize([NotNull] IRazorPage razorPage,
bool isPartial)
{
_razorPage = razorPage;
_isPartial = isPartial;
}
/// <inheritdoc />
public virtual async Task RenderAsync([NotNull] ViewContext context)
{
if (_razorPage == null)
{
var message = Resources.FormatViewMustBeContextualized(nameof(Contextualize), nameof(RenderAsync));
throw new InvalidOperationException(message);
}
_pageExecutionFeature = context.HttpContext.GetFeature<IPageExecutionListenerFeature>();
if (_isPartial)
if (IsPartial)
{
await RenderPartialAsync(context);
}
else
{
var bodyWriter = await RenderPageAsync(_razorPage, context, executeViewStart: true);
var bodyWriter = await RenderPageAsync(RazorPage, context, executeViewStart: true);
await RenderLayoutAsync(context, bodyWriter);
}
}
@ -84,14 +82,14 @@ namespace Microsoft.AspNet.Mvc.Razor
{
// When instrmenting, we need to Decorate the output in an instrumented writer which
// RenderPageAsync does.
var bodyWriter = await RenderPageAsync(_razorPage, context, executeViewStart: false);
var bodyWriter = await RenderPageAsync(RazorPage, context, executeViewStart: false);
await bodyWriter.CopyToAsync(context.Writer);
}
else
{
// For the non-instrumented case, we don't need to buffer contents. For Html.Partial, the writer is
// an in memory writer and for Partial views, we directly write to the Response.
await RenderPageCoreAsync(_razorPage, context);
await RenderPageCoreAsync(RazorPage, context);
}
}
@ -142,7 +140,7 @@ namespace Microsoft.AspNet.Mvc.Razor
private async Task RenderPageCoreAsync(IRazorPage page, ViewContext context)
{
page.IsPartial = _isPartial;
page.IsPartial = IsPartial;
page.ViewContext = context;
if (EnableInstrumentation)
{
@ -155,7 +153,7 @@ namespace Microsoft.AspNet.Mvc.Razor
private async Task RenderViewStartAsync(ViewContext context)
{
var viewStarts = _viewStartProvider.GetViewStartPages(_razorPage.Path);
var viewStarts = _viewStartProvider.GetViewStartPages(RazorPage.Path);
string layout = null;
foreach (var viewStart in viewStarts)
@ -167,7 +165,7 @@ namespace Microsoft.AspNet.Mvc.Razor
}
// Copy over interesting properties from the ViewStart page to the entry page.
_razorPage.Layout = layout;
RazorPage.Layout = layout;
}
private async Task RenderLayoutAsync(ViewContext context,
@ -175,7 +173,7 @@ namespace Microsoft.AspNet.Mvc.Razor
{
// A layout page can specify another layout page. We'll need to continue
// looking for layout pages until they're no longer specified.
var previousPage = _razorPage;
var previousPage = RazorPage;
while (!string.IsNullOrEmpty(previousPage.Layout))
{
if (!bodyWriter.IsBuffering)

View File

@ -34,7 +34,7 @@ namespace Microsoft.AspNet.Mvc.Razor
};
private readonly IRazorPageFactory _pageFactory;
private readonly IRazorViewFactory _pageViewFactory;
private readonly IRazorViewFactory _viewFactory;
private readonly IReadOnlyList<IViewLocationExpander> _viewLocationExpanders;
private readonly IViewLocationCache _viewLocationCache;
@ -43,12 +43,12 @@ namespace Microsoft.AspNet.Mvc.Razor
/// </summary>
/// <param name="pageFactory">The page factory used for creating <see cref="IRazorPage"/> instances.</param>
public RazorViewEngine(IRazorPageFactory pageFactory,
IRazorViewFactory pageViewFactory,
IRazorViewFactory viewFactory,
IViewLocationExpanderProvider viewLocationExpanderProvider,
IViewLocationCache viewLocationCache)
{
_pageFactory = pageFactory;
_pageViewFactory = pageViewFactory;
_viewFactory = viewFactory;
_viewLocationExpanders = viewLocationExpanderProvider.ViewLocationExpanders;
_viewLocationCache = viewLocationCache;
}
@ -197,7 +197,7 @@ namespace Microsoft.AspNet.Mvc.Razor
var services = actionContext.HttpContext.RequestServices;
var view = _pageViewFactory.GetView(page, partial);
var view = _viewFactory.GetView(page, partial);
return ViewEngineResult.Found(viewName, view);
}

View File

@ -5,6 +5,10 @@ using Microsoft.AspNet.Mvc.Rendering;
namespace Microsoft.AspNet.Mvc.Razor
{
/// <summary>
/// Represents the default <see cref="IRazorViewFactory"/> implementation that creates
/// <see cref="RazorView"/> instances with a given <see cref="IRazorPage"/>.
/// </summary>
public class RazorViewFactory : IRazorViewFactory
{
private readonly IRazorPageActivator _pageActivator;
@ -19,8 +23,8 @@ namespace Microsoft.AspNet.Mvc.Razor
/// <param name="viewStartProvider">The <see cref="IViewStartProvider"/> used for discovery of _ViewStart
/// pages</param>
public RazorViewFactory(IRazorPageFactory pageFactory,
IRazorPageActivator pageActivator,
IViewStartProvider viewStartProvider)
IRazorPageActivator pageActivator,
IViewStartProvider viewStartProvider)
{
_pageFactory = pageFactory;
_pageActivator = pageActivator;
@ -30,10 +34,7 @@ namespace Microsoft.AspNet.Mvc.Razor
/// <inheritdoc />
public IView GetView([NotNull] IRazorPage page, bool isPartial)
{
var razorView = new RazorView(_pageFactory, _pageActivator, _viewStartProvider);
razorView.Contextualize(page, isPartial);
var razorView = new RazorView(_pageFactory, _pageActivator, _viewStartProvider, page, isPartial);
return razorView;
}
}

View File

@ -83,6 +83,32 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
Assert.False(result.Success);
}
[Fact]
public void FindPartialView_ReturnsRazorView_IfLookupWasSuccessful()
{
// Arrange
var pageFactory = new Mock<IRazorPageFactory>();
var viewFactory = new Mock<IRazorViewFactory>();
var page = Mock.Of<IRazorPage>();
pageFactory.Setup(p => p.CreateInstance(It.IsAny<string>()))
.Returns(Mock.Of<IRazorPage>());
viewFactory.Setup(p => p.GetView(It.IsAny<IRazorPage>(), It.IsAny<bool>()))
.Returns(Mock.Of<IView>()).Verifiable();
var viewEngine = CreateViewEngine(pageFactory.Object, viewFactory.Object);
var context = GetActionContext(_controllerTestContext);
// Act
var result = viewEngine.FindPartialView(context, "test-view");
// Assert
Assert.True(result.Success);
Assert.IsAssignableFrom<IView>(result.View);
Assert.Equal("/Views/bar/test-view.cshtml", result.ViewName);
viewFactory.Verify();
}
[Theory]
[InlineData(null)]
[InlineData("")]
@ -216,7 +242,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
pageFactory.Setup(p => p.CreateInstance(It.IsAny<string>()))
.Returns(Mock.Of<IRazorPage>());
viewFactory.Setup(p => p.GetView(It.IsAny<IRazorPage>(), It.IsAny<bool>()))
.Returns(Mock.Of<IView>());
.Returns(Mock.Of<IView>()).Verifiable();
var viewEngine = CreateViewEngine(pageFactory.Object, viewFactory.Object);
var context = GetActionContext(_controllerTestContext);
@ -228,6 +254,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
Assert.True(result.Success);
Assert.IsAssignableFrom<IView>(result.View);
Assert.Equal("/Views/bar/test-view.cshtml", result.ViewName);
viewFactory.Verify();
}
[Fact]
@ -356,7 +383,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
// Assert
Assert.True(result.Success);
Assert.IsAssignableFrom<RazorView>(result.View);
Assert.IsAssignableFrom<IView>(result.View);
pageFactory.Verify();
expander1.Verify();
expander2.Verify();
@ -445,8 +472,7 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
.Verifiable();
var viewFactory = new Mock<IRazorViewFactory>();
viewFactory.Setup(p => p.GetView(It.IsAny<IRazorPage>(), It.IsAny<bool>()))
.Returns(Mock.Of<IView>());
viewFactory.Setup(p => p.GetView(It.IsAny<IRazorPage>(), It.IsAny<bool>())).Returns(Mock.Of<IView>());
var cacheMock = new Mock<IViewLocationCache>();
cacheMock.Setup(c => c.Get(It.IsAny<ViewLocationExpanderContext>()))
@ -463,9 +489,9 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
var viewEngine = CreateViewEngine(pageFactory.Object,
viewFactory.Object,
new[] { expander.Object },
cacheMock.Object);
var context = GetActionContext(_controllerTestContext);
expanders: new[] { expander.Object },
cache: cacheMock.Object);
var context = GetActionContext(_controllerTestContext, viewFactory.Object);
// Act
var result = viewEngine.FindView(context, "baz");
@ -520,8 +546,6 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
{
var httpContext = new DefaultHttpContext();
var serviceProvider = new Mock<IServiceProvider>();
serviceProvider.Setup(p => p.GetService(typeof(IRazorViewFactory)))
.Returns(razorViewFactory ?? Mock.Of<IRazorViewFactory>());
httpContext.RequestServices = serviceProvider.Object;

View File

@ -14,6 +14,46 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
{
public class RazorViewFactoryTest
{
[Fact]
public void GetView_SetsIsPartial()
{
// Arrange
var factory = new RazorViewFactory(
Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
Mock.Of<IViewStartProvider>());
// Act
var viewPartial = factory.GetView(Mock.Of<IRazorPage>(), isPartial: true) as RazorView;
var view = factory.GetView(Mock.Of<IRazorPage>(), isPartial: false) as RazorView;
// Assert
Assert.NotNull(viewPartial);
Assert.True(viewPartial.IsPartial);
Assert.NotNull(view);
Assert.True(!view.IsPartial);
}
[Fact]
public void GetView_SetsRazorPage()
{
// Arrange
var factory = new RazorViewFactory(
Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
Mock.Of<IViewStartProvider>());
var page = Mock.Of<IRazorPage>();
// Act
var view = factory.GetView(page, isPartial: false) as RazorView;
// Assert
Assert.NotNull(view);
Assert.Same(view.RazorPage, page);
}
[Fact]
public void GetView_ReturnsRazorView()
{
@ -24,71 +64,11 @@ namespace Microsoft.AspNet.Mvc.Razor.Test
Mock.Of<IViewStartProvider>());
// Act
var view = factory.GetView(Mock.Of<IRazorPage>(), true);
var view = factory.GetView(Mock.Of<IRazorPage>(), isPartial: true);
// Assert
Assert.IsType<RazorView>(view);
}
[Fact]
public async Task RenderAsync_ContextualizeMustBeInvoked()
{
// Arrange
var page = new TestableRazorPage(v => { });
var factory = new RazorViewFactory(
Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
// Act
var view = factory.GetView(page, true);
// Assert
var viewContext = CreateViewContext(view);
await Assert.DoesNotThrowAsync(() => view.RenderAsync(viewContext));
}
private static IViewStartProvider CreateViewStartProvider()
{
var viewStartPages = new IRazorPage[0];
var viewStartProvider = new Mock<IViewStartProvider>();
viewStartProvider.Setup(v => v.GetViewStartPages(It.IsAny<string>()))
.Returns(viewStartPages);
return viewStartProvider.Object;
}
private static ViewContext CreateViewContext(IView view)
{
var httpContext = new DefaultHttpContext();
var actionContext = new ActionContext(httpContext, routeData: null, actionDescriptor: null);
return new ViewContext(
actionContext,
view,
new ViewDataDictionary(new EmptyModelMetadataProvider()),
new StringWriter());
}
private class TestableRazorPage : RazorPage
{
private readonly Action<TestableRazorPage> _executeAction;
public TestableRazorPage(Action<TestableRazorPage> executeAction)
{
_executeAction = executeAction;
}
public void RenderBodyPublic()
{
Write(RenderBody());
}
public override Task ExecuteAsync()
{
_executeAction(this);
return Task.FromResult(0);
}
}
}
}

View File

@ -18,23 +18,6 @@ namespace Microsoft.AspNet.Mvc.Razor
private const string LayoutPath = "~/Shared/_Layout.cshtml";
private readonly RenderAsyncDelegate _nullRenderAsyncDelegate = async writer => { };
[Fact]
public async Task RenderAsync_ThrowsIfContextualizeHasNotBeenInvoked()
{
// Arrange
var page = new TestableRazorPage(v => { });
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
var viewContext = CreateViewContext(view);
var expected = viewContext.Writer;
// Act and Assert
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => view.RenderAsync(viewContext));
Assert.Equal("The 'Contextualize' method must be called before 'RenderAsync' can be invoked.",
ex.Message);
}
[Fact]
public async Task RenderAsync_AsPartial_DoesNotBufferOutput()
{
@ -47,8 +30,9 @@ namespace Microsoft.AspNet.Mvc.Razor
});
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: true);
CreateViewStartProvider(),
page,
isPartial: true);
var viewContext = CreateViewContext(view);
var expected = viewContext.Writer;
@ -71,11 +55,12 @@ namespace Microsoft.AspNet.Mvc.Razor
Assert.Same(viewData, v.ViewContext.ViewData);
});
var activator = new Mock<IRazorPageActivator>();
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
activator.Object,
CreateViewStartProvider());
view.Contextualize(page, isPartial: true);
CreateViewStartProvider(),
page,
isPartial: true);
var viewContext = CreateViewContext(view);
var expectedWriter = viewContext.Writer;
activator.Setup(a => a.Activate(page, It.IsAny<ViewContext>()))
@ -104,8 +89,9 @@ namespace Microsoft.AspNet.Mvc.Razor
.Verifiable();
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
activator.Object,
CreateViewStartProvider());
view.Contextualize(page, isPartial: true);
CreateViewStartProvider(),
page,
isPartial: true);
var viewContext = CreateViewContext(view);
// Act
@ -126,8 +112,9 @@ namespace Microsoft.AspNet.Mvc.Razor
var viewStartProvider = CreateViewStartProvider();
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
viewStartProvider);
view.Contextualize(page, isPartial: true);
viewStartProvider,
page,
isPartial: true);
var viewContext = CreateViewContext(view);
// Act
@ -150,8 +137,9 @@ namespace Microsoft.AspNet.Mvc.Razor
});
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
var original = viewContext.Writer;
@ -173,8 +161,9 @@ namespace Microsoft.AspNet.Mvc.Razor
});
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
var original = viewContext.Writer;
@ -198,9 +187,9 @@ namespace Microsoft.AspNet.Mvc.Razor
.Verifiable();
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
activator.Object,
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -240,8 +229,9 @@ namespace Microsoft.AspNet.Mvc.Razor
.Verifiable();
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
activator.Object,
CreateViewStartProvider(viewStart1, viewStart2));
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(viewStart1, viewStart2),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -294,8 +284,9 @@ foot-content";
var view = new RazorView(pageFactory.Object,
activator.Object,
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -327,8 +318,9 @@ foot-content";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act and Assert
@ -353,8 +345,9 @@ foot-content";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act and Assert
@ -404,8 +397,9 @@ body-content";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -450,8 +444,9 @@ section-content-2";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -494,8 +489,9 @@ section-content-2";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -520,8 +516,9 @@ section-content-2";
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act and Assert
@ -558,8 +555,9 @@ section-content-2";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act and Assert
@ -630,8 +628,9 @@ section-content-2";
.Verifiable();
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
viewStartProvider.Object);
view.Contextualize(page, isPartial: false);
viewStartProvider.Object,
page,
isPartial: false);
var viewContext = CreateViewContext(view);
viewContext.HttpContext.SetFeature<IPageExecutionListenerFeature>(feature.Object);
@ -673,8 +672,9 @@ section-content-2";
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
Mock.Of<IViewStartProvider>());
view.Contextualize(page, isPartial: true);
Mock.Of<IViewStartProvider>(),
page,
isPartial: true);
var viewContext = CreateViewContext(view);
viewContext.Writer = writer;
viewContext.HttpContext.SetFeature<IPageExecutionListenerFeature>(feature.Object);
@ -703,8 +703,9 @@ section-content-2";
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
Mock.Of<IViewStartProvider>());
view.Contextualize(page, isPartial);
Mock.Of<IViewStartProvider>(),
page,
isPartial);
var viewContext = CreateViewContext(view);
// Act
@ -741,8 +742,9 @@ section-content-2";
var view = new RazorView(pageFactory,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider(viewStart1, viewStart2));
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(viewStart1, viewStart2),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -777,8 +779,9 @@ section-content-2";
var view = new RazorView(pageFactory,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider(viewStart1, viewStart2));
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(viewStart1, viewStart2),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -816,8 +819,9 @@ section-content-2";
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider(viewStart));
view.Contextualize(page, isPartial: false);
CreateViewStartProvider(viewStart),
page,
isPartial: false);
var viewContext = CreateViewContext(view);
// Act
@ -840,8 +844,9 @@ section-content-2";
});
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: true);
CreateViewStartProvider(),
page,
isPartial: true);
var viewContext = CreateViewContext(view);
// Act