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