Enable Razor templates inside of sections.
- Changed the variable used to render templates (`HelperResult`s) so they can be used inside of sections. - Updated section test file to showcase nested scenario. Also Regenerated existing test files. #572
This commit is contained in:
parent
b7b3273fa4
commit
6bad1bba5b
|
|
@ -15,6 +15,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors
|
||||||
private const string ItemParameterName = "item";
|
private const string ItemParameterName = "item";
|
||||||
private const string ValueWriterName = "__razor_attribute_value_writer";
|
private const string ValueWriterName = "__razor_attribute_value_writer";
|
||||||
private const string TemplateWriterName = "__razor_template_writer";
|
private const string TemplateWriterName = "__razor_template_writer";
|
||||||
|
private const string SectionWriterName = "__razor_section_writer";
|
||||||
private const int MaxStringLiteralLength = 1024;
|
private const int MaxStringLiteralLength = 1024;
|
||||||
|
|
||||||
private CSharpPaddingBuilder _paddingBuilder;
|
private CSharpPaddingBuilder _paddingBuilder;
|
||||||
|
|
@ -377,9 +378,9 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors
|
||||||
.WriteParameterSeparator();
|
.WriteParameterSeparator();
|
||||||
|
|
||||||
var currentTargetWriterName = Context.TargetWriterName;
|
var currentTargetWriterName = Context.TargetWriterName;
|
||||||
Context.TargetWriterName = TemplateWriterName;
|
Context.TargetWriterName = SectionWriterName;
|
||||||
|
|
||||||
using (Writer.BuildAsyncLambda(endLine: false, parameterNames: TemplateWriterName))
|
using (Writer.BuildAsyncLambda(endLine: false, parameterNames: SectionWriterName))
|
||||||
{
|
{
|
||||||
Accept(chunk.Children);
|
Accept(chunk.Children);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -397,7 +397,7 @@ namespace Microsoft.AspNetCore.Razor.Test.Generator
|
||||||
documentAbsoluteIndex: 204,
|
documentAbsoluteIndex: 204,
|
||||||
documentLineIndex: 13,
|
documentLineIndex: 13,
|
||||||
documentCharacterOffsetIndex: 5,
|
documentCharacterOffsetIndex: 5,
|
||||||
generatedAbsoluteIndex: 1197,
|
generatedAbsoluteIndex: 1196,
|
||||||
generatedLineIndex: 60,
|
generatedLineIndex: 60,
|
||||||
generatedCharacterOffsetIndex: 6,
|
generatedCharacterOffsetIndex: 6,
|
||||||
contentLength: 3),
|
contentLength: 3),
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ __o = Foo(item => new Template(async(__razor_template_writer) => {
|
||||||
|
|
||||||
#line default
|
#line default
|
||||||
#line hidden
|
#line hidden
|
||||||
DefineSection("Footer", async(__razor_template_writer) => {
|
DefineSection("Footer", async(__razor_section_writer) => {
|
||||||
#line 14 "DesignTime.cshtml"
|
#line 14 "DesignTime.cshtml"
|
||||||
__o = bar;
|
__o = bar;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ namespace TestOutput
|
||||||
#pragma warning disable 1998
|
#pragma warning disable 1998
|
||||||
public override async Task ExecuteAsync()
|
public override async Task ExecuteAsync()
|
||||||
{
|
{
|
||||||
DefineSection("Link", async(__razor_template_writer) => {
|
DefineSection("Link", async(__razor_section_writer) => {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Instrumentation.BeginContext(13, 23, true);
|
Instrumentation.BeginContext(13, 23, true);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#pragma checksum "Sections.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "19b065ba387522fb8b9b4aea4820b3752d898d0a"
|
#pragma checksum "Sections.cshtml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "bf45c2508895b4b9b3579bc193e7a0167ccdbdfb"
|
||||||
namespace TestOutput
|
namespace TestOutput
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
@ -24,21 +24,64 @@ namespace TestOutput
|
||||||
Instrumentation.BeginContext(49, 31, true);
|
Instrumentation.BeginContext(49, 31, true);
|
||||||
WriteLiteral("\r\n<div>This is in the Body>\r\n\r\n");
|
WriteLiteral("\r\n<div>This is in the Body>\r\n\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
DefineSection("Section2", async(__razor_template_writer) => {
|
DefineSection("Section2", async(__razor_section_writer) => {
|
||||||
Instrumentation.BeginContext(99, 39, true);
|
Instrumentation.BeginContext(99, 39, true);
|
||||||
WriteLiteralTo(__razor_template_writer, "\r\n <div>This is in Section 2</div>\r\n");
|
WriteLiteralTo(__razor_section_writer, "\r\n <div>This is in Section 2</div>\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
Instrumentation.BeginContext(141, 2, true);
|
Instrumentation.BeginContext(141, 2, true);
|
||||||
WriteLiteral("\r\n");
|
WriteLiteral("\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
DefineSection("Section1", async(__razor_template_writer) => {
|
DefineSection("Section1", async(__razor_section_writer) => {
|
||||||
Instrumentation.BeginContext(162, 39, true);
|
Instrumentation.BeginContext(162, 39, true);
|
||||||
WriteLiteralTo(__razor_template_writer, "\r\n <div>This is in Section 1</div>\r\n");
|
WriteLiteralTo(__razor_section_writer, "\r\n <div>This is in Section 1</div>\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Instrumentation.BeginContext(204, 2, true);
|
||||||
|
WriteLiteral("\r\n");
|
||||||
|
Instrumentation.EndContext();
|
||||||
|
DefineSection("NestedDelegates", async(__razor_section_writer) => {
|
||||||
|
Instrumentation.BeginContext(232, 2, true);
|
||||||
|
WriteLiteralTo(__razor_section_writer, "\r\n");
|
||||||
|
Instrumentation.EndContext();
|
||||||
|
#line 16 "Sections.cshtml"
|
||||||
|
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
#line 16 "Sections.cshtml"
|
||||||
|
Func<dynamic, object> f =
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
item => new Template(async(__razor_template_writer) => {
|
||||||
|
Instrumentation.BeginContext(268, 6, true);
|
||||||
|
WriteLiteralTo(__razor_template_writer, "<span>");
|
||||||
|
Instrumentation.EndContext();
|
||||||
|
Instrumentation.BeginContext(275, 4, false);
|
||||||
|
#line 16 "Sections.cshtml"
|
||||||
|
WriteTo(__razor_template_writer, item);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
Instrumentation.EndContext();
|
||||||
|
Instrumentation.BeginContext(279, 7, true);
|
||||||
|
WriteLiteralTo(__razor_template_writer, "</span>");
|
||||||
|
Instrumentation.EndContext();
|
||||||
|
}
|
||||||
|
)
|
||||||
|
#line 16 "Sections.cshtml"
|
||||||
|
;
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
#pragma warning restore 1998
|
#pragma warning restore 1998
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,9 +103,9 @@ namespace TestOutput
|
||||||
|
|
||||||
");
|
");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
DefineSection("WriteLiteralsToInHere", async(__razor_template_writer) => {
|
DefineSection("WriteLiteralsToInHere", async(__razor_section_writer) => {
|
||||||
Instrumentation.BeginContext(2045, 2618, true);
|
Instrumentation.BeginContext(2045, 2618, true);
|
||||||
WriteLiteralTo(__razor_template_writer, @"
|
WriteLiteralTo(__razor_section_writer, @"
|
||||||
<p>This is line 1 nested</p>
|
<p>This is line 1 nested</p>
|
||||||
<p>This is line 2 nested</p>
|
<p>This is line 2 nested</p>
|
||||||
<p>This is line 3 nested</p>
|
<p>This is line 3 nested</p>
|
||||||
|
|
@ -136,7 +136,7 @@ namespace TestOutput
|
||||||
<p>This is line 28 nested</p>
|
<p>This is line 28 nested</p>
|
||||||
<p>This is line 29 nested</p>
|
<p>This is line 29 nested</p>
|
||||||
<p>This is l");
|
<p>This is l");
|
||||||
WriteLiteralTo(__razor_template_writer, @"ine 30 nested</p>
|
WriteLiteralTo(__razor_section_writer, @"ine 30 nested</p>
|
||||||
<p>This is line 31 nested</p>
|
<p>This is line 31 nested</p>
|
||||||
<p>This is line 32 nested</p>
|
<p>This is line 32 nested</p>
|
||||||
<p>This is line 33 nested</p>
|
<p>This is line 33 nested</p>
|
||||||
|
|
@ -166,7 +166,7 @@ namespace TestOutput
|
||||||
<p>This is line 57 nested</p>
|
<p>This is line 57 nested</p>
|
||||||
<p>This is line 58 nested</p>
|
<p>This is line 58 nested</p>
|
||||||
<p>This is line 59 ne");
|
<p>This is line 59 ne");
|
||||||
WriteLiteralTo(__razor_template_writer, @"sted</p>
|
WriteLiteralTo(__razor_section_writer, @"sted</p>
|
||||||
<p>This is line 60 nested</p>
|
<p>This is line 60 nested</p>
|
||||||
<p>This is line 61 nested</p>
|
<p>This is line 61 nested</p>
|
||||||
<p>This is line 62 nested</p>
|
<p>This is line 62 nested</p>
|
||||||
|
|
@ -233,9 +233,9 @@ namespace TestOutput
|
||||||
<p>This is line 43</p>hi!");
|
<p>This is line 43</p>hi!");
|
||||||
WriteLiteral("\r\n");
|
WriteLiteral("\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
DefineSection("WriteLiteralsToInHereAlso", async(__razor_template_writer) => {
|
DefineSection("WriteLiteralsToInHereAlso", async(__razor_section_writer) => {
|
||||||
Instrumentation.BeginContext(5728, 1023, true);
|
Instrumentation.BeginContext(5728, 1023, true);
|
||||||
WriteLiteralTo(__razor_template_writer, @"
|
WriteLiteralTo(__razor_section_writer, @"
|
||||||
<p>This is line 1 nested</p>
|
<p>This is line 1 nested</p>
|
||||||
<p>This is line 2 nested</p>
|
<p>This is line 2 nested</p>
|
||||||
<p>This is line 3 nested</p>
|
<p>This is line 3 nested</p>
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,9 @@ namespace TestOutput
|
||||||
Instrumentation.BeginContext(69, 2, true);
|
Instrumentation.BeginContext(69, 2, true);
|
||||||
WriteLiteral("\r\n");
|
WriteLiteral("\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
DefineSection("MySection", async(__razor_template_writer) => {
|
DefineSection("MySection", async(__razor_section_writer) => {
|
||||||
Instrumentation.BeginContext(91, 21, true);
|
Instrumentation.BeginContext(91, 21, true);
|
||||||
WriteLiteralTo(__razor_template_writer, "\r\n <div>\r\n ");
|
WriteLiteralTo(__razor_section_writer, "\r\n <div>\r\n ");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag, "test", async() => {
|
__tagHelperExecutionContext = __tagHelperScopeManager.Begin("mytaghelper", global::Microsoft.AspNetCore.Razor.TagHelpers.TagMode.StartTagAndEndTag, "test", async() => {
|
||||||
Instrumentation.BeginContext(215, 52, true);
|
Instrumentation.BeginContext(215, 52, true);
|
||||||
|
|
@ -101,11 +101,11 @@ AddHtmlAttributeValue(" ", 199, DateTime.Now, 200, 14, false);
|
||||||
__tagHelperExecutionContext.Output.Content = await __tagHelperExecutionContext.Output.GetChildContentAsync();
|
__tagHelperExecutionContext.Output.Content = await __tagHelperExecutionContext.Output.GetChildContentAsync();
|
||||||
}
|
}
|
||||||
Instrumentation.BeginContext(112, 245, false);
|
Instrumentation.BeginContext(112, 245, false);
|
||||||
WriteTo(__razor_template_writer, __tagHelperExecutionContext.Output);
|
WriteTo(__razor_section_writer, __tagHelperExecutionContext.Output);
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
__tagHelperExecutionContext = __tagHelperScopeManager.End();
|
__tagHelperExecutionContext = __tagHelperScopeManager.End();
|
||||||
Instrumentation.BeginContext(357, 14, true);
|
Instrumentation.BeginContext(357, 14, true);
|
||||||
WriteLiteralTo(__razor_template_writer, "\r\n </div>\r\n");
|
WriteLiteralTo(__razor_section_writer, "\r\n </div>\r\n");
|
||||||
Instrumentation.EndContext();
|
Instrumentation.EndContext();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,8 @@
|
||||||
|
|
||||||
@section Section1 {
|
@section Section1 {
|
||||||
<div>This is in Section 1</div>
|
<div>This is in Section 1</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
@section NestedDelegates {
|
||||||
|
@{ Func<dynamic, object> f = @<span>@item</span>; }
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue