diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs
index be824387be..526b1cb1d1 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/CacheTagHelper.cs
@@ -158,7 +158,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
// created within this scope get copied to this scope.
using (var link = MemoryCache.CreateLinkingScope())
{
- result = await context.GetChildContentAsync();
+ result = await output.GetChildContentAsync();
MemoryCache.Set(key, result, GetMemoryCacheEntryOptions(link));
}
@@ -173,7 +173,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
}
else
{
- result = await context.GetChildContentAsync();
+ result = await output.GetChildContentAsync();
output.Content.SetContent(result);
}
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
index 5b51078b49..63939b5391 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
@@ -77,7 +77,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
//
if (!output.IsContentModified)
{
- var childContent = await context.GetChildContentAsync();
+ var childContent = await output.GetChildContentAsync();
if (childContent.IsWhiteSpace)
{
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
index f930fecd65..97d8b627d6 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/OptionTagHelper.cs
@@ -111,7 +111,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
}
else
{
- var childContent = await context.GetChildContentAsync();
+ var childContent = await output.GetChildContentAsync();
selected = encodedValues.Contains(childContent.GetContent());
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
index 47a36cc42c..1716b83c87 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/RenderAtEndOfFormTagHelper.cs
@@ -24,6 +24,16 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
[ViewContext]
public ViewContext ViewContext { get; set; }
+ ///
+ public override void Init(TagHelperContext context)
+ {
+ // Push the new FormContext.
+ ViewContext.FormContext = new FormContext
+ {
+ CanRenderAtEndOfForm = true
+ };
+ }
+
///
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
@@ -37,13 +47,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
throw new ArgumentNullException(nameof(output));
}
- // Push the new FormContext.
- ViewContext.FormContext = new FormContext
- {
- CanRenderAtEndOfForm = true
- };
-
- await context.GetChildContentAsync();
+ await output.GetChildContentAsync();
var formContext = ViewContext.FormContext;
if (formContext.HasEndOfFormContent)
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs
index 641b5caf99..3204c83405 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/ValidationMessageTagHelper.cs
@@ -79,7 +79,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
//
if (!output.IsContentModified)
{
- var childContent = await context.GetChildContentAsync();
+ var childContent = await output.GetChildContentAsync();
if (childContent.IsWhiteSpace)
{
diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs
index de683c1cd5..58eeffdc69 100644
--- a/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Razor.Test/RazorPageTest.cs
@@ -1663,7 +1663,10 @@ namespace Microsoft.AspNet.Mvc.Razor
},
startTagHelperWritingScope: () => { },
endTagHelperWritingScope: () => defaultTagHelperContent);
- tagHelperExecutionContext.Output = new TagHelperOutput("p", new TagHelperAttributeList());
+ tagHelperExecutionContext.Output = new TagHelperOutput(
+ tagName: "p",
+ attributes: new TagHelperAttributeList(),
+ getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent()));
if (childContentRetrieved)
{
await tagHelperExecutionContext.GetChildContentAsync(useCachedResult: true);
@@ -1695,7 +1698,10 @@ namespace Microsoft.AspNet.Mvc.Razor
executeChildContentAsync: () => { return Task.FromResult(result: true); },
startTagHelperWritingScope: () => { },
endTagHelperWritingScope: () => new DefaultTagHelperContent());
- tagHelperExecutionContext.Output = new TagHelperOutput("p", new TagHelperAttributeList());
+ tagHelperExecutionContext.Output = new TagHelperOutput(
+ tagName: "p",
+ attributes: new TagHelperAttributeList(),
+ getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent()));
tagHelperExecutionContext.Output.Content.AppendEncoded("Hello World!");
// Act
@@ -1749,7 +1755,10 @@ namespace Microsoft.AspNet.Mvc.Razor
string postContent,
string postElement)
{
- var output = new TagHelperOutput(tagName, attributes)
+ var output = new TagHelperOutput(
+ tagName,
+ attributes,
+ getChildContentAsync: (_) => Task.FromResult(new DefaultTagHelperContent()))
{
TagMode = tagMode
};
diff --git a/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs
index 34b653a321..171438ba01 100644
--- a/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.Razor.Test/TagHelpers/UrlResolutionTagHelperTest.cs
@@ -52,7 +52,8 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers
attributes: new TagHelperAttributeList
{
{ "href", url }
- });
+ },
+ getChildContentAsync: _ => Task.FromResult(null));
var urlHelperMock = new Mock();
urlHelperMock
.Setup(urlHelper => urlHelper.Content(It.IsAny()))
@@ -63,8 +64,7 @@ namespace Microsoft.AspNet.Mvc.Razor.TagHelpers
allAttributes: new ReadOnlyTagHelperAttributeList(
Enumerable.Empty()),
items: new Dictionary