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:
parent
c6e4609096
commit
4032de064e
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
Hello from _PageStart
|
||||
|
|
@ -0,0 +1 @@
|
|||
Hello from _ViewStart
|
||||
Loading…
Reference in New Issue