diff --git a/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs b/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs index 4874a084c5..334dc12961 100644 --- a/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs +++ b/src/Microsoft.AspNet.Razor/Parser/TagHelpers/TagHelperParseTreeRewriter.cs @@ -572,22 +572,18 @@ namespace Microsoft.AspNet.Razor.Parser.TagHelpers.Internal private class TagHelperBlockTracker { + private IEnumerable _prefixedAllowedChildren; + public TagHelperBlockTracker(TagHelperBlockBuilder builder) { Builder = builder; if (Builder.Descriptors.Any(descriptor => descriptor.AllowedChildren != null)) { - Debug.Assert(Builder.Descriptors.Count() >= 1); - - var tagHelperPrefix = Builder.Descriptors.First().Prefix; - AllowedChildren = Builder.Descriptors .Where(descriptor => descriptor.AllowedChildren != null) .SelectMany(descriptor => descriptor.AllowedChildren) .Distinct(StringComparer.OrdinalIgnoreCase); - - PrefixedAllowedChildren = AllowedChildren.Select(allowedChild => tagHelperPrefix + allowedChild); } } @@ -597,7 +593,21 @@ namespace Microsoft.AspNet.Razor.Parser.TagHelpers.Internal public IEnumerable AllowedChildren { get; } - public IEnumerable PrefixedAllowedChildren { get; } + public IEnumerable PrefixedAllowedChildren + { + get + { + if (AllowedChildren != null && _prefixedAllowedChildren == null) + { + Debug.Assert(Builder.Descriptors.Count() >= 1); + + var prefix = Builder.Descriptors.First().Prefix; + _prefixedAllowedChildren = AllowedChildren.Select(allowedChild => prefix + allowedChild); + } + + return _prefixedAllowedChildren; + } + } } } } \ No newline at end of file