diff --git a/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs b/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs
index 425548d5d5..3ebb79d415 100644
--- a/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs
+++ b/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs
@@ -567,9 +567,14 @@ namespace Microsoft.AspNet.Razor.Parser.TagHelpers.Internal
if (Builder.Descriptors.Any(descriptor => descriptor.AllowedChildren != null))
{
+ Debug.Assert(Builder.Descriptors.Count() >= 1);
+
+ var tagHelperPrefix = Builder.Descriptors.First().Prefix;
+
AllowedChildren = Builder.Descriptors
.SelectMany(descriptor => descriptor.AllowedChildren)
- .Distinct(StringComparer.OrdinalIgnoreCase);
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .Select(allowedChild => tagHelperPrefix + allowedChild);
}
}
diff --git a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs
index 43b90ab7a8..bef69e963f 100644
--- a/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs
+++ b/test/Microsoft.AspNet.Razor.Test/TagHelpers/TagHelperParseTreeRewriterTest.cs
@@ -18,6 +18,44 @@ namespace Microsoft.AspNet.Razor.Test.TagHelpers
{
public class TagHelperParseTreeRewriterTest : TagHelperRewritingTestBase
{
+ [Fact]
+ public void Rewrite_UnderstandsTagHelperPrefixAndRestrictedChildren()
+ {
+ // Arrange
+ var factory = CreateDefaultSpanFactory();
+ var blockFactory = new BlockFactory(factory);
+ var documentContent = "";
+ var expectedOutput = new MarkupBlock(
+ new MarkupTagHelperBlock("th:p",
+ new MarkupTagHelperBlock("th:strong")));
+ var descriptors = new TagHelperDescriptor[]
+ {
+ new TagHelperDescriptor
+ {
+ TagName = "p",
+ TypeName = "PTagHelper",
+ AssemblyName = "SomeAssembly",
+ AllowedChildren = new[] { "strong" },
+ Prefix = "th:"
+ },
+ new TagHelperDescriptor
+ {
+ TagName = "strong",
+ TypeName = "StrongTagHelper",
+ AssemblyName = "SomeAssembly",
+ Prefix = "th:"
+ }
+ };
+ var descriptorProvider = new TagHelperDescriptorProvider(descriptors);
+
+ // Act & Assert
+ EvaluateData(
+ descriptorProvider,
+ documentContent,
+ expectedOutput,
+ expectedErrors: Enumerable.Empty());
+ }
+
public static TheoryData InvalidHtmlScriptBlockData
{
get