diff --git a/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs b/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs
index 5792fbde85..e91f129e3e 100644
--- a/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs
+++ b/src/Microsoft.AspNetCore.Razor/Parser/HtmlMarkupParser.Block.cs
@@ -1118,7 +1118,9 @@ namespace Microsoft.AspNetCore.Razor.Parser
}
}
- if (!EndOfFile && CurrentSymbol.Type == HtmlSymbolType.NewLine)
+ if (!EndOfFile &&
+ At(HtmlSymbolType.NewLine) &&
+ Context.LastSpan.Kind != SpanKind.Transition)
{
AcceptAndMoveNext();
}
diff --git a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs
index de1cf3cb40..32bccf471a 100644
--- a/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Test/Parser/CSharp/CSharpToMarkupSwitchTest.cs
@@ -685,10 +685,8 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.CSharp
Factory.Code("p").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharacters.NonWhiteSpace)
),
new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharacters.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharacters.None)
- ),
- Factory.Code($" }}{Environment.NewLine} if(!false) {{{Environment.NewLine}").AsStatement(),
+ Factory.MarkupTransition("").Accepts(AcceptedCharacters.None))),
+ Factory.Code($"{Environment.NewLine} }}{Environment.NewLine} if(!false) {{{Environment.NewLine}").AsStatement(),
new MarkupBlock(
Factory.Markup(" "),
new MarkupTagBlock(
diff --git a/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs b/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs
index 9d763b1cd6..1cd8f1a76c 100644
--- a/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Test/Parser/Html/HtmlDocumentTest.cs
@@ -320,6 +320,26 @@ namespace Microsoft.AspNetCore.Razor.Test.Parser.Html
BlockFactory.MarkupTagBlock("")));
}
+ [Fact]
+ public void ParseDocumentDoesNotRenderExtraNewlineAtTheEndTextTagInVerbatimBlock()
+ {
+ ParseDocumentTest("@{Blah\r\n\r\n}",
+ new MarkupBlock(
+ Factory.EmptyHtml(),
+ new StatementBlock(
+ Factory.CodeTransition(),
+ Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
+ new MarkupBlock(
+ new MarkupTagBlock(
+ Factory.MarkupTransition("")),
+ Factory.Markup("Blah").Accepts(AcceptedCharacters.None),
+ new MarkupTagBlock(
+ Factory.MarkupTransition(""))),
+ Factory.Code("\r\n\r\n").AsStatement(),
+ Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
+ BlockFactory.MarkupTagBlock("")));
+ }
+
[Fact]
public void ParseDocumentDoesNotIgnoreNewLineAtTheEndOfMarkupBlock()
{
diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs
index 30b57a0f13..5097644ecf 100644
--- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs
+++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/CodeBlockWithTextElement.cs
@@ -49,10 +49,8 @@ namespace TestOutput
#line default
#line hidden
Instrumentation.EndContext();
- Instrumentation.BeginContext(80, 2, true);
- WriteLiteral("\r\n");
- Instrumentation.EndContext();
-#line 4 "CodeBlockWithTextElement.cshtml"
+#line 3 "CodeBlockWithTextElement.cshtml"
+
#line default
#line hidden