Removing _PageStart.cshtml

Pages now also use _ViewStart.cshtml

Also contains some naming/text cleanup that was missed in the previous
commit.
This commit is contained in:
Ryan Nowak 2017-04-04 14:50:15 -07:00
parent c6e4609096
commit 4032de064e
14 changed files with 66 additions and 62 deletions

View File

@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure
pageContext.ViewData.Model = result.Model; pageContext.ViewData.Model = result.Model;
} }
var view = new RazorView(_razorViewEngine, _razorPageActivator, pageContext.PageStarts, result.Page, _htmlEncoder); var view = new RazorView(_razorViewEngine, _razorPageActivator, pageContext.ViewStarts, result.Page, _htmlEncoder);
pageContext.View = view; pageContext.View = view;
return ExecuteAsync(pageContext, result.ContentType, result.StatusCode); return ExecuteAsync(pageContext, result.ContentType, result.StatusCode);
} }

View File

@ -307,22 +307,22 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
_pageContext.Page = _page; _pageContext.Page = _page;
_pageContext.ValueProviderFactories = _valueProviderFactories; _pageContext.ValueProviderFactories = _valueProviderFactories;
IRazorPage[] pageStarts; IRazorPage[] viewStarts;
if (CacheEntry.PageStartFactories == null || CacheEntry.PageStartFactories.Count == 0) if (CacheEntry.ViewStartFactories == null || CacheEntry.ViewStartFactories.Count == 0)
{ {
pageStarts = Array.Empty<IRazorPage>(); viewStarts = Array.Empty<IRazorPage>();
} }
else else
{ {
pageStarts = new IRazorPage[CacheEntry.PageStartFactories.Count]; viewStarts = new IRazorPage[CacheEntry.ViewStartFactories.Count];
for (var i = 0; i < pageStarts.Length; i++) for (var i = 0; i < viewStarts.Length; i++)
{ {
var pageFactory = CacheEntry.PageStartFactories[i]; var pageFactory = CacheEntry.ViewStartFactories[i];
pageStarts[i] = pageFactory(); viewStarts[i] = pageFactory();
} }
} }
_pageContext.PageStarts = pageStarts; _pageContext.ViewStarts = viewStarts;
if (actionDescriptor.ModelTypeInfo == null) if (actionDescriptor.ModelTypeInfo == null)
{ {

View File

@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
Func<PageContext, object> modelFactory, Func<PageContext, object> modelFactory,
Action<PageContext, object> releaseModel, Action<PageContext, object> releaseModel,
Func<Page, object, Task> propertyBinder, Func<Page, object, Task> propertyBinder,
IReadOnlyList<Func<IRazorPage>> pageStartFactories, IReadOnlyList<Func<IRazorPage>> viewStartFactories,
FilterItem[] cacheableFilters) FilterItem[] cacheableFilters)
{ {
ActionDescriptor = actionDescriptor; ActionDescriptor = actionDescriptor;
@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
ModelFactory = modelFactory; ModelFactory = modelFactory;
ReleaseModel = releaseModel; ReleaseModel = releaseModel;
PropertyBinder = propertyBinder; PropertyBinder = propertyBinder;
PageStartFactories = pageStartFactories; ViewStartFactories = viewStartFactories;
CacheableFilters = cacheableFilters; CacheableFilters = cacheableFilters;
} }
@ -54,9 +54,9 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
public Func<Page, object, Task> PropertyBinder { get; } public Func<Page, object, Task> PropertyBinder { get; }
/// <summary> /// <summary>
/// Gets the applicable PageStarts. /// Gets the applicable ViewStart pages.
/// </summary> /// </summary>
public IReadOnlyList<Func<IRazorPage>> PageStartFactories { get; } public IReadOnlyList<Func<IRazorPage>> ViewStartFactories { get; }
public FilterItem[] CacheableFilters { get; } public FilterItem[] CacheableFilters { get; }
} }

View File

@ -25,7 +25,8 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
{ {
public class PageActionInvokerProvider : IActionInvokerProvider public class PageActionInvokerProvider : IActionInvokerProvider
{ {
private const string PageStartFileName = "_PageStart.cshtml"; private const string ViewStartFileName = "_ViewStart.cshtml";
private readonly IPageLoader _loader; private readonly IPageLoader _loader;
private readonly IPageFactoryProvider _pageFactoryProvider; private readonly IPageFactoryProvider _pageFactoryProvider;
private readonly IPageModelFactoryProvider _modelFactoryProvider; private readonly IPageModelFactoryProvider _modelFactoryProvider;
@ -192,7 +193,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
modelReleaser = _modelFactoryProvider.CreateModelDisposer(compiledActionDescriptor); modelReleaser = _modelFactoryProvider.CreateModelDisposer(compiledActionDescriptor);
} }
var pageStartFactories = GetPageStartFactories(compiledActionDescriptor); var viewStartFactories = GetViewStartFactories(compiledActionDescriptor);
return new PageActionInvokerCacheEntry( return new PageActionInvokerCacheEntry(
compiledActionDescriptor, compiledActionDescriptor,
@ -201,31 +202,31 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
modelFactory, modelFactory,
modelReleaser, modelReleaser,
propertyBinder, propertyBinder,
pageStartFactories, viewStartFactories,
cachedFilters); cachedFilters);
} }
// Internal for testing. // Internal for testing.
internal List<Func<IRazorPage>> GetPageStartFactories(CompiledPageActionDescriptor descriptor) internal List<Func<IRazorPage>> GetViewStartFactories(CompiledPageActionDescriptor descriptor)
{ {
var pageStartFactories = new List<Func<IRazorPage>>(); var viewStartFactories = new List<Func<IRazorPage>>();
var pageStartItems = _razorProject.FindHierarchicalItems( var viewStartItems = _razorProject.FindHierarchicalItems(
_razorPagesOptions.RootDirectory, _razorPagesOptions.RootDirectory,
descriptor.RelativePath, descriptor.RelativePath,
PageStartFileName); ViewStartFileName);
foreach (var item in pageStartItems) foreach (var item in viewStartItems)
{ {
if (item.Exists) if (item.Exists)
{ {
var factoryResult = _razorPageFactoryProvider.CreateFactory(item.Path); var factoryResult = _razorPageFactoryProvider.CreateFactory(item.Path);
if (factoryResult.Success) if (factoryResult.Success)
{ {
pageStartFactories.Insert(0, factoryResult.RazorPageFactory); viewStartFactories.Insert(0, factoryResult.RazorPageFactory);
} }
} }
} }
return pageStartFactories; return viewStartFactories;
} }
// Internal for testing. // Internal for testing.

View File

@ -79,9 +79,9 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages
} }
/// <summary> /// <summary>
/// Gets or sets the applicable _PageStart instances. /// Gets or sets the applicable _ViewStart instances.
/// </summary> /// </summary>
public IReadOnlyList<IRazorPage> PageStarts { get; set; } public IReadOnlyList<IRazorPage> ViewStarts { get; set; }
/// <summary> /// <summary>
/// Gets or sets the list of <see cref="IValueProviderFactory"/> instances for the current request. /// Gets or sets the list of <see cref="IValueProviderFactory"/> instances for the current request.

View File

@ -444,28 +444,28 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
} }
[Fact] [Fact]
public async Task PageStart_IsDiscoveredWhenRootDirectoryIsNotSpecified() public async Task ViewStart_IsDiscoveredWhenRootDirectoryIsNotSpecified()
{ {
// Test for https://github.com/aspnet/Mvc/issues/5915 // Test for https://github.com/aspnet/Mvc/issues/5915
//Arrange //Arrange
var expected = $"Hello from _PageStart{Environment.NewLine}Hello from /Pages/WithPageStart/Index.cshtml!"; var expected = $"Hello from _ViewStart{Environment.NewLine}Hello from /Pages/WithViewStart/Index.cshtml!";
// Act // Act
var response = await Client.GetStringAsync("/Pages/WithPageStart"); var response = await Client.GetStringAsync("/Pages/WithViewStart");
// Assert // Assert
Assert.Equal(expected, response.Trim()); Assert.Equal(expected, response.Trim());
} }
[Fact] [Fact]
public async Task PageImport_IsDiscoveredWhenRootDirectoryIsNotSpecified() public async Task ViewImport_IsDiscoveredWhenRootDirectoryIsNotSpecified()
{ {
// Test for https://github.com/aspnet/Mvc/issues/5915 // Test for https://github.com/aspnet/Mvc/issues/5915
// Arrange // Arrange
var expected = "Hello from CustomService!"; var expected = "Hello from CustomService!";
// Act // Act
var response = await Client.GetStringAsync("/Pages/WithPageImport"); var response = await Client.GetStringAsync("/Pages/WithViewImport");
// Assert // Assert
Assert.Equal(expected, response.Trim()); Assert.Equal(expected, response.Trim());

View File

@ -116,28 +116,28 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
} }
[Fact] [Fact]
public async Task PageStart_IsDiscoveredWhenRootDirectoryIsSpecified() public async Task ViewStart_IsDiscoveredWhenRootDirectoryIsSpecified()
{ {
// Test for https://github.com/aspnet/Mvc/issues/5915 // Test for https://github.com/aspnet/Mvc/issues/5915
//Arrange //Arrange
var expected = $"Hello from _PageStart{Environment.NewLine}Hello from /Pages/WithPageStart/Index.cshtml!"; var expected = $"Hello from _ViewStart{Environment.NewLine}Hello from /Pages/WithViewStart/Index.cshtml!";
// Act // Act
var response = await Client.GetStringAsync("/WithPageStart"); var response = await Client.GetStringAsync("/WithViewStart");
// Assert // Assert
Assert.Equal(expected, response.Trim()); Assert.Equal(expected, response.Trim());
} }
[Fact] [Fact]
public async Task PageImport_IsDiscoveredWhenRootDirectoryIsSpecified() public async Task ViewImport_IsDiscoveredWhenRootDirectoryIsSpecified()
{ {
// Test for https://github.com/aspnet/Mvc/issues/5915 // Test for https://github.com/aspnet/Mvc/issues/5915
//Arrange //Arrange
var expected = "Hello from CustomService!"; var expected = "Hello from CustomService!";
// Act // Act
var response = await Client.GetStringAsync("/WithPageImport"); var response = await Client.GetStringAsync("/WithViewImport");
// Assert // Assert
Assert.Equal(expected, response.Trim()); Assert.Equal(expected, response.Trim());

View File

@ -240,13 +240,16 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
var razorPageFactoryProvider = new Mock<IRazorPageFactoryProvider>(); var razorPageFactoryProvider = new Mock<IRazorPageFactoryProvider>();
Func<IRazorPage> factory1 = () => null; Func<IRazorPage> factory1 = () => null;
Func<IRazorPage> factory2 = () => null; Func<IRazorPage> factory2 = () => null;
razorPageFactoryProvider.Setup(f => f.CreateFactory("/Home/Path1/_PageStart.cshtml")) razorPageFactoryProvider
.Setup(f => f.CreateFactory("/Home/Path1/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(factory1, new IChangeToken[0])); .Returns(new RazorPageFactoryResult(factory1, new IChangeToken[0]));
razorPageFactoryProvider.Setup(f => f.CreateFactory("/_PageStart.cshtml")) razorPageFactoryProvider.Setup(f => f.CreateFactory("/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(factory2, new[] { Mock.Of<IChangeToken>() })); .Returns(new RazorPageFactoryResult(factory2, new[] { Mock.Of<IChangeToken>() }));
var fileProvider = new TestFileProvider(); var fileProvider = new TestFileProvider();
fileProvider.AddFile("/Home/Path1/_PageStart.cshtml", "content1"); fileProvider.AddFile("/Home/Path1/_ViewStart.cshtml", "content1");
fileProvider.AddFile("/_PageStart.cshtml", "content2"); fileProvider.AddFile("/_ViewStart.cshtml", "content2");
var defaultRazorProject = new TestRazorProject(fileProvider); var defaultRazorProject = new TestRazorProject(fileProvider);
var invokerProvider = CreateInvokerProvider( var invokerProvider = CreateInvokerProvider(
@ -264,7 +267,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
Assert.NotNull(context.Result); Assert.NotNull(context.Result);
var actionInvoker = Assert.IsType<PageActionInvoker>(context.Result); var actionInvoker = Assert.IsType<PageActionInvoker>(context.Result);
var entry = actionInvoker.CacheEntry; var entry = actionInvoker.CacheEntry;
Assert.Equal(new[] { factory2, factory1 }, entry.PageStartFactories); Assert.Equal(new[] { factory2, factory1 }, entry.ViewStartFactories);
} }
[Fact] [Fact]
@ -606,7 +609,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
} }
[Fact] [Fact]
public void GetPageStartFactories_FindsFullHeirarchy() public void GetViewStartFactories_FindsFullHeirarchy()
{ {
// Arrange // Arrange
var descriptor = new PageActionDescriptor() var descriptor = new PageActionDescriptor()
@ -623,22 +626,22 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
actionDescriptorProvider.Setup(p => p.ActionDescriptors).Returns(descriptorCollection); actionDescriptorProvider.Setup(p => p.ActionDescriptors).Returns(descriptorCollection);
var fileProvider = new TestFileProvider(); var fileProvider = new TestFileProvider();
fileProvider.AddFile("/View/Deeper/Not_PageStart.cshtml", "page content"); fileProvider.AddFile("/View/Deeper/Not_ViewStart.cshtml", "page content");
fileProvider.AddFile("/View/Wrong/_PageStart.cshtml", "page content"); fileProvider.AddFile("/View/Wrong/_ViewStart.cshtml", "page content");
fileProvider.AddFile("/_PageStart.cshtml", "page content "); fileProvider.AddFile("/_ViewStart.cshtml", "page content ");
fileProvider.AddFile("/Views/_PageStart.cshtml", "@page starts!"); fileProvider.AddFile("/Views/_ViewStart.cshtml", "@page starts!");
fileProvider.AddFile("/Views/Deeper/_PageStart.cshtml", "page content"); fileProvider.AddFile("/Views/Deeper/_ViewStart.cshtml", "page content");
var razorProject = new TestRazorProject(fileProvider); var razorProject = new TestRazorProject(fileProvider);
var mock = new Mock<IRazorPageFactoryProvider>(); var mock = new Mock<IRazorPageFactoryProvider>();
mock.Setup(p => p.CreateFactory("/Views/Deeper/_PageStart.cshtml")) mock.Setup(p => p.CreateFactory("/Views/Deeper/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>())) .Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>()))
.Verifiable(); .Verifiable();
mock.Setup(p => p.CreateFactory("/Views/_PageStart.cshtml")) mock.Setup(p => p.CreateFactory("/Views/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>())) .Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>()))
.Verifiable(); .Verifiable();
mock.Setup(p => p.CreateFactory("/_PageStart.cshtml")) mock.Setup(p => p.CreateFactory("/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>())) .Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>()))
.Verifiable(); .Verifiable();
var razorPageFactoryProvider = mock.Object; var razorPageFactoryProvider = mock.Object;
@ -654,7 +657,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
var compiledDescriptor = CreateCompiledPageActionDescriptor(descriptor); var compiledDescriptor = CreateCompiledPageActionDescriptor(descriptor);
// Act // Act
var factories = invokerProvider.GetPageStartFactories(compiledDescriptor); var factories = invokerProvider.GetViewStartFactories(compiledDescriptor);
// Assert // Assert
mock.Verify(); mock.Verify();
@ -663,7 +666,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
[Theory] [Theory]
[InlineData("/Pages/Level1/")] [InlineData("/Pages/Level1/")]
[InlineData("/Pages/Level1")] [InlineData("/Pages/Level1")]
public void GetPageFactories_DoesNotFindPageStartsOutsideBaseDirectory(string rootDirectory) public void GetPageFactories_DoesNotFindViewStartsOutsideBaseDirectory(string rootDirectory)
{ {
// Arrange // Arrange
var descriptor = new PageActionDescriptor() var descriptor = new PageActionDescriptor()
@ -684,19 +687,19 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
actionDescriptorProvider.Setup(p => p.ActionDescriptors).Returns(descriptorCollection); actionDescriptorProvider.Setup(p => p.ActionDescriptors).Returns(descriptorCollection);
var fileProvider = new TestFileProvider(); var fileProvider = new TestFileProvider();
fileProvider.AddFile("/_PageStart.cshtml", "page content"); fileProvider.AddFile("/_ViewStart.cshtml", "page content");
fileProvider.AddFile("/Pages/_PageStart.cshtml", "page content"); fileProvider.AddFile("/Pages/_ViewStart.cshtml", "page content");
fileProvider.AddFile("/Pages/Level1/_PageStart.cshtml", "page content"); fileProvider.AddFile("/Pages/Level1/_ViewStart.cshtml", "page content");
fileProvider.AddFile("/Pages/Level1/Level2/_PageStart.cshtml", "page content"); fileProvider.AddFile("/Pages/Level1/Level2/_ViewStart.cshtml", "page content");
fileProvider.AddFile("/Pages/Level1/Level3/_PageStart.cshtml", "page content"); fileProvider.AddFile("/Pages/Level1/Level3/_ViewStart.cshtml", "page content");
var razorProject = new TestRazorProject(fileProvider); var razorProject = new TestRazorProject(fileProvider);
var mock = new Mock<IRazorPageFactoryProvider>(MockBehavior.Strict); var mock = new Mock<IRazorPageFactoryProvider>(MockBehavior.Strict);
mock.Setup(p => p.CreateFactory("/Pages/Level1/Level2/_PageStart.cshtml")) mock.Setup(p => p.CreateFactory("/Pages/Level1/Level2/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>())) .Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>()))
.Verifiable(); .Verifiable();
mock.Setup(p => p.CreateFactory("/Pages/Level1/_PageStart.cshtml")) mock.Setup(p => p.CreateFactory("/Pages/Level1/_ViewStart.cshtml"))
.Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>())) .Returns(new RazorPageFactoryResult(() => null, new List<IChangeToken>()))
.Verifiable(); .Verifiable();
var razorPageFactoryProvider = mock.Object; var razorPageFactoryProvider = mock.Object;
@ -713,14 +716,14 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
razorPagesOptions: options); razorPagesOptions: options);
// Act // Act
var factories = invokerProvider.GetPageStartFactories(compiledPageDescriptor); var factories = invokerProvider.GetViewStartFactories(compiledPageDescriptor);
// Assert // Assert
mock.Verify(); mock.Verify();
} }
[Fact] [Fact]
public void GetPageStartFactories_NoFactoriesForMissingFiles() public void GetViewStartFactories_NoFactoriesForMissingFiles()
{ {
// Arrange // Arrange
var descriptor = new PageActionDescriptor() var descriptor = new PageActionDescriptor()
@ -751,7 +754,7 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
var compiledDescriptor = CreateCompiledPageActionDescriptor(descriptor); var compiledDescriptor = CreateCompiledPageActionDescriptor(descriptor);
// Act // Act
var factories = invokerProvider.GetPageStartFactories(compiledDescriptor); var factories = invokerProvider.GetViewStartFactories(compiledDescriptor);
// Assert // Assert
Assert.Empty(factories); Assert.Empty(factories);

View File

@ -1 +0,0 @@
Hello from _PageStart

View File

@ -0,0 +1 @@
Hello from _ViewStart