Add IsPartial property to IRazorPage

Fixes #1002
This commit is contained in:
Pranav K 2014-10-16 15:09:58 -07:00
parent ba8b91646a
commit b8d30f29c6
4 changed files with 73 additions and 0 deletions

View File

@ -44,6 +44,12 @@ namespace Microsoft.AspNet.Mvc.Razor
/// </summary>
string Layout { get; set; }
/// <summary>
/// Gets or sets a value that determines if the current instance of <see cref="IRazorPage"/> is being executed
/// from a partial view.
/// </summary>
bool IsPartial { get; set; }
/// <summary>
/// Gets or sets a <see cref="IPageExecutionContext"/> instance used to instrument the page execution.
/// </summary>

View File

@ -57,6 +57,9 @@ namespace Microsoft.AspNet.Mvc.Razor
/// <inheritdoc />
public string Layout { get; set; }
/// <inheritdoc />
public bool IsPartial { get; set; }
/// <inheritdoc />
public IPageExecutionContext PageExecutionContext { get; set; }

View File

@ -136,6 +136,7 @@ namespace Microsoft.AspNet.Mvc.Razor
private async Task RenderPageCoreAsync(IRazorPage page, ViewContext context)
{
page.IsPartial = _isPartial;
page.ViewContext = context;
if (EnableInstrumentation)
{

View File

@ -788,6 +788,69 @@ section-content-2";
Assert.Equal(expected, actual);
}
[Fact]
public async Task IsPartial_IsSetToFalse_ForViewStartPageAndLayoutOfAView()
{
// Arrange
bool? isPartialPage = null;
bool? isPartialLayout = null;
bool? isPartialViewStart = null;
var page = new TestableRazorPage(v =>
{
isPartialPage = v.IsPartial;
});
var viewStart = new TestableRazorPage(v =>
{
v.Layout = "/Layout.cshtml";
isPartialViewStart = v.IsPartial;
});
var layout = new TestableRazorPage(v =>
{
isPartialLayout = v.IsPartial;
v.RenderBodyPublic();
});
var pageFactory = new Mock<IRazorPageFactory>();
pageFactory.Setup(p => p.CreateInstance("/Layout.cshtml"))
.Returns(layout);
var view = new RazorView(pageFactory.Object,
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider(viewStart));
view.Contextualize(page, isPartial: false);
var viewContext = CreateViewContext(view);
// Act
await view.RenderAsync(viewContext);
// Assert
Assert.False(isPartialPage.Value);
Assert.False(isPartialLayout.Value);
Assert.False(isPartialViewStart.Value);
}
[Fact]
public async Task IsPartial_IsSetToTrue_ForPartialView()
{
// Arrange
bool? isPartialPage = null;
var page = new TestableRazorPage(v =>
{
isPartialPage = v.IsPartial;
});
var view = new RazorView(Mock.Of<IRazorPageFactory>(),
Mock.Of<IRazorPageActivator>(),
CreateViewStartProvider());
view.Contextualize(page, isPartial: true);
var viewContext = CreateViewContext(view);
// Act
await view.RenderAsync(viewContext);
// Assert
Assert.True(isPartialPage.Value);
}
private static TextWriter CreateBufferedWriter()
{
var mockWriter = new Mock<TextWriter>();