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;
}
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;
return ExecuteAsync(pageContext, result.ContentType, result.StatusCode);
}

View File

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

View File

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

View File

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

View File

@ -79,9 +79,9 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages
}
/// <summary>
/// Gets or sets the applicable _PageStart instances.
/// Gets or sets the applicable _ViewStart instances.
/// </summary>
public IReadOnlyList<IRazorPage> PageStarts { get; set; }
public IReadOnlyList<IRazorPage> ViewStarts { get; set; }
/// <summary>
/// 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]
public async Task PageStart_IsDiscoveredWhenRootDirectoryIsNotSpecified()
public async Task ViewStart_IsDiscoveredWhenRootDirectoryIsNotSpecified()
{
// Test for https://github.com/aspnet/Mvc/issues/5915
//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
var response = await Client.GetStringAsync("/Pages/WithPageStart");
var response = await Client.GetStringAsync("/Pages/WithViewStart");
// Assert
Assert.Equal(expected, response.Trim());
}
[Fact]
public async Task PageImport_IsDiscoveredWhenRootDirectoryIsNotSpecified()
public async Task ViewImport_IsDiscoveredWhenRootDirectoryIsNotSpecified()
{
// Test for https://github.com/aspnet/Mvc/issues/5915
// Arrange
var expected = "Hello from CustomService!";
// Act
var response = await Client.GetStringAsync("/Pages/WithPageImport");
var response = await Client.GetStringAsync("/Pages/WithViewImport");
// Assert
Assert.Equal(expected, response.Trim());

View File

@ -116,28 +116,28 @@ namespace Microsoft.AspNetCore.Mvc.FunctionalTests
}
[Fact]
public async Task PageStart_IsDiscoveredWhenRootDirectoryIsSpecified()
public async Task ViewStart_IsDiscoveredWhenRootDirectoryIsSpecified()
{
// Test for https://github.com/aspnet/Mvc/issues/5915
//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
var response = await Client.GetStringAsync("/WithPageStart");
var response = await Client.GetStringAsync("/WithViewStart");
// Assert
Assert.Equal(expected, response.Trim());
}
[Fact]
public async Task PageImport_IsDiscoveredWhenRootDirectoryIsSpecified()
public async Task ViewImport_IsDiscoveredWhenRootDirectoryIsSpecified()
{
// Test for https://github.com/aspnet/Mvc/issues/5915
//Arrange
var expected = "Hello from CustomService!";
// Act
var response = await Client.GetStringAsync("/WithPageImport");
var response = await Client.GetStringAsync("/WithViewImport");
// Assert
Assert.Equal(expected, response.Trim());

View File

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

View File

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

View File

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