diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs index 8a7b2657f9..d564623c7d 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorIRLoweringPhase.cs @@ -126,7 +126,26 @@ namespace Microsoft.AspNetCore.Razor.Evolution public override void VisitEndTemplateBlock(TemplateBlockChunkGenerator chunkGenerator, Block block) { - Builder.Pop(); + var templateNode = Builder.Pop(); + if (templateNode.Children.Count > 0) + { + var sourceRangeStart = templateNode + .Children + .FirstOrDefault(child => child.SourceRange != null) + ?.SourceRange; + + if (sourceRangeStart != null) + { + var contentLength = templateNode.Children.Sum(child => child.SourceRange?.ContentLength ?? 0); + + templateNode.SourceRange = new MappingLocation( + sourceRangeStart.AbsoluteIndex, + sourceRangeStart.LineIndex, + sourceRangeStart.CharacterIndex, + contentLength, + sourceRangeStart.FilePath ?? _codeDocument.Source.Filename); + } + } } // CSharp expressions are broken up into blocks and spans because Razor allows Razor comments @@ -150,19 +169,35 @@ namespace Microsoft.AspNetCore.Razor.Evolution .Children .FirstOrDefault(child => child.SourceRange != null) ?.SourceRange; - var contentLength = expressionNode.Children.Sum(child => child.SourceRange?.ContentLength ?? 0); - expressionNode.SourceRange = new MappingLocation( - sourceRangeStart.AbsoluteIndex, - sourceRangeStart.LineIndex, - sourceRangeStart.CharacterIndex, - contentLength, - sourceRangeStart.FilePath ?? _codeDocument.Source.Filename); + if (sourceRangeStart != null) + { + var contentLength = expressionNode.Children.Sum(child => child.SourceRange?.ContentLength ?? 0); + + expressionNode.SourceRange = new MappingLocation( + sourceRangeStart.AbsoluteIndex, + sourceRangeStart.LineIndex, + sourceRangeStart.CharacterIndex, + contentLength, + sourceRangeStart.FilePath ?? _codeDocument.Source.Filename); + } } } public override void VisitExpressionSpan(ExpressionChunkGenerator chunkGenerator, Span span) { + if (span.Symbols.Count == 1) + { + var symbol = span.Symbols[0] as CSharpSymbol; + if (symbol != null && + symbol.Type == CSharpSymbolType.Unknown && + symbol.Content.Length == 0) + { + // We don't want to create IR nodes for marker symbols. + return; + } + } + Builder.Add(new CSharpTokenIRNode() { Content = span.Content, @@ -181,11 +216,29 @@ namespace Microsoft.AspNetCore.Razor.Evolution public override void VisitMarkupSpan(MarkupChunkGenerator chunkGenerator, Span span) { + if (span.Symbols.Count == 1) + { + var symbol = span.Symbols[0] as HtmlSymbol; + if (symbol != null && + symbol.Type == HtmlSymbolType.Unknown && + symbol.Content.Length == 0) + { + // We don't want to create IR nodes for marker symbols. + return; + } + } + var currentChildren = Builder.Current.Children; if (currentChildren.Count > 0 && currentChildren[currentChildren.Count - 1] is HtmlContentIRNode) { var existingHtmlContent = (HtmlContentIRNode)currentChildren[currentChildren.Count - 1]; existingHtmlContent.Content = string.Concat(existingHtmlContent.Content, span.Content); + existingHtmlContent.SourceRange = new MappingLocation( + existingHtmlContent.SourceRange.AbsoluteIndex, + existingHtmlContent.SourceRange.LineIndex, + existingHtmlContent.SourceRange.CharacterIndex, + existingHtmlContent.SourceRange.ContentLength + span.Content.Length, + existingHtmlContent.SourceRange.FilePath); } else { diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorRuntimeCSharpLoweringPhase.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorRuntimeCSharpLoweringPhase.cs index 69e97628ce..d85e3dca05 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorRuntimeCSharpLoweringPhase.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultRazorRuntimeCSharpLoweringPhase.cs @@ -316,12 +316,11 @@ namespace Microsoft.AspNetCore.Razor.Evolution if (node.SourceRange != null) { linePragmaScope = new LinePragmaWriter(Context.Writer, node.SourceRange); + var padding = BuildOffsetPadding(Context.RenderingConventions.StartWriteMethod.Length, node.SourceRange); + Context.Writer.Write(padding); } - var padding = BuildOffsetPadding(Context.RenderingConventions.StartWriteMethod.Length, node.SourceRange); - Context.Writer - .Write(padding) - .Write(Context.RenderingConventions.StartWriteMethod); + Context.Writer.Write(Context.RenderingConventions.StartWriteMethod); VisitDefault(node); diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs index 3a9717d99d..cbdc895377 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs @@ -95,9 +95,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution node => Assert.IsType(node), node => CSharpStatement(" var value = true; ", node)); var method = (RazorMethodDeclarationIRNode)@class.Children[0]; - Children(method, - node => Html(string.Empty, node), - node => Html(string.Empty, node)); + Assert.Empty(method.Children); } [Fact] @@ -129,11 +127,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution var @class = @namespace.Children[2]; var method = SingleChild(@class); Children(method, - node => Html(string.Empty, node), node => CSharpStatement("DefineSection(\"Header\", async () => {", node), node => Html("

Hello World

", node), - node => CSharpStatement("});", node), - node => Html(string.Empty, node)); + node => CSharpStatement("});", node)); } [Fact] @@ -166,11 +162,9 @@ namespace Microsoft.AspNetCore.Razor.Evolution var @class = @namespace.Children[2]; var method = SingleChild(@class); Children(method, - node => Html(string.Empty, node), node => CSharpStatement("DefineSection(\"Header\", async (__razor_section_writer) => {", node), node => Html("

Hello World

", node), - node => CSharpStatement("});", node), - node => Html(string.Empty, node)); + node => CSharpStatement("});", node)); } private static DocumentIRNode Lower(RazorCodeDocument codeDocument) diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/Intermediate/DefaultRazorIRLoweringPhaseIntegrationTest.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/Intermediate/DefaultRazorIRLoweringPhaseIntegrationTest.cs index 3109207c16..bdeb979369 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/Intermediate/DefaultRazorIRLoweringPhaseIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/Intermediate/DefaultRazorIRLoweringPhaseIntegrationTest.cs @@ -33,9 +33,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Intermediate n => Assert.IsType(n)); var @class = @namespace.Children[2]; var method = SingleChild(@class); - var html = SingleChild(method); - - Assert.Equal(string.Empty, html.Content); + Assert.Empty(method.Children); } [Fact] diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/CustomDirective.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/CustomDirective.ir.txt index b096fef432..d11cf3074c 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/CustomDirective.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/CustomDirective.ir.txt @@ -5,6 +5,4 @@ Document - UsingStatement - - System.Threading.Tasks ClassDeclaration - - - - - RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [0] CustomDirective.cshtml) - Directive - - test_directive - HtmlContent - (15:0,15 [0] CustomDirective.cshtml) - diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/Empty.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/Empty.ir.txt index 937bd6b428..209f3858f3 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/Empty.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/BasicIntegrationTest/Empty.ir.txt @@ -5,4 +5,3 @@ Document - UsingStatement - - System.Threading.Tasks ClassDeclaration - - - - - RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [0] Empty.cshtml) - diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithConditionalAttribute.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithConditionalAttribute.ir.txt index 5126896a1f..1f69c34356 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithConditionalAttribute.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithConditionalAttribute.ir.txt @@ -5,9 +5,9 @@ Document - UsingStatement - - System.Threading.Tasks ClassDeclaration - - - - - RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [6] HtmlWithConditionalAttribute.cshtml) - \n\n \n\n \n\n" + HtmlContent - (38:2,22 [22] HtmlWithConditionalAttribute.cshtml) - />\n\n" diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithDataDashAttribute.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithDataDashAttribute.ir.txt index 693abac537..27d5940f69 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithDataDashAttribute.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/HtmlAttributeIntegrationTest/HtmlWithDataDashAttribute.ir.txt @@ -5,7 +5,7 @@ Document - UsingStatement - - System.Threading.Tasks ClassDeclaration - - - - - RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [6] HtmlWithDataDashAttribute.cshtml) - \n\n \n\n" + HtmlContent - (42:2,26 [23] HtmlWithDataDashAttribute.cshtml) - " />\n\n" diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyExplicitExpression.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyExplicitExpression.codegen.cs index 609aba05c2..37e5bb7148 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyExplicitExpression.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyExplicitExpression.codegen.cs @@ -10,11 +10,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles public async System.Threading.Tasks.Task ExecuteAsync() { WriteLiteral("This is markup\r\n\r\n"); -#line 3 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyExplicitExpression.cshtml" -Write(); - -#line default -#line hidden + Write(); } #pragma warning restore 1998 } diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpression.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpression.codegen.cs index cae55a6785..d96d17cda0 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpression.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpression.codegen.cs @@ -10,11 +10,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles public async System.Threading.Tasks.Task ExecuteAsync() { WriteLiteral("This is markup\r\n\r\n"); -#line 3 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpression.cshtml" -Write(); - -#line default -#line hidden + Write(); WriteLiteral("!"); } #pragma warning restore 1998 diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpressionInCode.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpressionInCode.codegen.cs index 404d0aa7fe..b6e8435d7d 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpressionInCode.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpressionInCode.codegen.cs @@ -9,11 +9,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles #pragma warning disable 1998 public async System.Threading.Tasks.Task ExecuteAsync() { -#line 2 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/EmptyImplicitExpressionInCode.cshtml" -Write(); - -#line default -#line hidden + Write(); } #pragma warning restore 1998 } diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionAtEOF.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionAtEOF.codegen.cs index bf308f8910..67b7aa036a 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionAtEOF.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionAtEOF.codegen.cs @@ -10,11 +10,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles public async System.Threading.Tasks.Task ExecuteAsync() { WriteLiteral("This is markup\r\n\r\n"); -#line 3 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionAtEOF.cshtml" -Write(); - -#line default -#line hidden + Write(); } #pragma warning restore 1998 } diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionWithMarkup.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionWithMarkup.codegen.cs index 2250d9cf27..f5e9711c72 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionWithMarkup.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionWithMarkup.codegen.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles { WriteLiteral("
"); #line 1 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ExplicitExpressionWithMarkup.cshtml" - Write(item => new HelperResult(async(__razor_template_writer) => { + Write(item => new HelperResult(async(__razor_template_writer) => { WriteLiteralTo(__razor_template_writer, "
"); } )); diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ImplicitExpressionAtEOF.codegen.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ImplicitExpressionAtEOF.codegen.cs index da2534b682..36c066b24f 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ImplicitExpressionAtEOF.codegen.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ImplicitExpressionAtEOF.codegen.cs @@ -10,11 +10,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests.TestFiles public async System.Threading.Tasks.Task ExecuteAsync() { WriteLiteral("This is markup\r\n\r\n"); -#line 3 "TestFiles/IntegrationTests/RuntimeCodeGenerationIntegrationTest/ImplicitExpressionAtEOF.cshtml" -Write(); - -#line default -#line hidden + Write(); } #pragma warning restore 1998 } diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/NestedTagHelpers.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/NestedTagHelpers.ir.txt index 8dc72abdf6..3f9f8b23f0 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/NestedTagHelpers.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/NestedTagHelpers.ir.txt @@ -6,7 +6,6 @@ Document - ClassDeclaration - - - - - DeclareTagHelperFields - - PTagHelper - FormTagHelper - InputTagHelper RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [0] NestedTagHelpers.cshtml) - TagHelper - InitializeTagHelperStructure - - p - TagMode.StartTagAndEndTag HtmlContent - (43:1,12 [4] NestedTagHelpers.cshtml) - Hola diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/SimpleTagHelpers.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/SimpleTagHelpers.ir.txt index 370e9352c7..b44130b996 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/SimpleTagHelpers.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/SimpleTagHelpers.ir.txt @@ -6,7 +6,7 @@ Document - ClassDeclaration - - - - - DeclareTagHelperFields - - InputTagHelper RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [0] SimpleTagHelpers.cshtml) -

Hola

\n
\n + HtmlContent - (31:1,0 [25] SimpleTagHelpers.cshtml) -

Hola

\n\n TagHelper - InitializeTagHelperStructure - - input - TagMode.SelfClosing CreateTagHelper - - InputTagHelper @@ -15,4 +15,4 @@ Document - AddTagHelperHtmlAttribute - - type - HtmlAttributeValueStyle.SingleQuotes HtmlContent - (83:3,31 [4] SimpleTagHelpers.cshtml) - text ExecuteTagHelpers - - HtmlContent - (91:3,39 [2] SimpleTagHelpers.cshtml) - \n
+ HtmlContent - (91:3,39 [9] SimpleTagHelpers.cshtml) - \n diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/TagHelpersWithBoundAttributes.ir.txt b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/TagHelpersWithBoundAttributes.ir.txt index 25adb9722e..ce6394201b 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/TagHelpersWithBoundAttributes.ir.txt +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/TestFiles/IntegrationTests/TagHelpersIntegrationTest/TagHelpersWithBoundAttributes.ir.txt @@ -6,7 +6,7 @@ Document - ClassDeclaration - - - - - DeclareTagHelperFields - - InputTagHelper RazorMethodDeclaration - - - - - - HtmlContent - (0:0,0 [0] TagHelpersWithBoundAttributes.cshtml) -
\n + HtmlContent - (31:1,0 [12] TagHelpersWithBoundAttributes.cshtml) - \n TagHelper - InitializeTagHelperStructure - - input - TagMode.SelfClosing CreateTagHelper - - InputTagHelper @@ -16,4 +16,4 @@ Document - AddTagHelperHtmlAttribute - - type - HtmlAttributeValueStyle.SingleQuotes HtmlContent - (69:2,30 [4] TagHelpersWithBoundAttributes.cshtml) - text ExecuteTagHelpers - - HtmlContent - (77:2,38 [2] TagHelpersWithBoundAttributes.cshtml) - \n
+ HtmlContent - (77:2,38 [9] TagHelpersWithBoundAttributes.cshtml) - \n