From b581ff343c46a9479282ba900407fe5ada20a163 Mon Sep 17 00:00:00 2001 From: sornaks Date: Wed, 4 Mar 2015 18:20:37 -0800 Subject: [PATCH] Making RazorPage.Write() handle TagHelperContent. --- src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs | 15 ++++++++++- .../RazorPageTest.cs | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs index 4f48356ce2..b5666cd01c 100644 --- a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs +++ b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs @@ -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()); + } } } } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs index e474c1c22e..7bb80fab87 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs @@ -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(); + expectedList.Add("Hello "); + expectedList.Add("World!"); + Assert.Equal(expectedList, writer.Buffer.BufferEntries); + } + private static TestableRazorPage CreatePage(Action executeAction, ViewContext context = null) {