Making RazorPage.Write() handle TagHelperContent.

This commit is contained in:
sornaks 2015-03-04 18:20:37 -08:00
parent 284eb9ac6a
commit b581ff343c
2 changed files with 40 additions and 1 deletions

View File

@ -298,7 +298,20 @@ namespace Microsoft.AspNet.Mvc.Razor
}
else
{
WriteTo(writer, value.ToString());
// This path is called when GetChildContentAsync() is called in tag helper
// and content is not set.
var tagHelperContent = value as TagHelperContent;
if (tagHelperContent != null)
{
foreach (var entry in tagHelperContent)
{
writer.Write(entry);
}
}
else
{
WriteTo(writer, value.ToString());
}
}
}
}

View File

@ -753,6 +753,32 @@ namespace Microsoft.AspNet.Mvc.Razor
Assert.Equal(expectedContent, writer.ToString());
}
[Fact]
public async Task Write_TagHelperContent_WritesContent()
{
// Arrange
// This writer uses BufferEntryCollection underneath and so can copy the buffer.
var writer = new StringCollectionTextWriter(Encoding.UTF8);
var context = CreateViewContext(writer);
var expectedContent = "Hello World!";
var contentToBeCopied = new DefaultTagHelperContent().SetContent("Hello ").Append("World!");
// Act
var page = CreatePage(p =>
{
p.Write(contentToBeCopied);
}, context);
await page.ExecuteAsync();
// Assert
Assert.Equal(expectedContent, writer.ToString());
Assert.Equal(2, writer.Buffer.BufferEntries.Count);
var expectedList = new List<object>();
expectedList.Add("Hello ");
expectedList.Add("World!");
Assert.Equal(expectedList, writer.Buffer.BufferEntries);
}
private static TestableRazorPage CreatePage(Action<TestableRazorPage> executeAction,
ViewContext context = null)
{