diff --git a/src/Microsoft.AspNet.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs b/src/Microsoft.AspNet.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs index 14710986d7..f521b40abb 100644 --- a/src/Microsoft.AspNet.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs +++ b/src/Microsoft.AspNet.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs @@ -650,9 +650,11 @@ namespace Microsoft.AspNet.Razor.CodeGenerators } else { - writer.WriteInstanceMethodInvocation(StringValueBufferVariableName, - "ToString", - endLine: false); + writer.WriteInstanceMethodInvocation( + StringValueBufferVariableName, + _tagHelperContext.TagHelperContentGetContentMethodName, + endLine: false, + parameters: new string[] { _tagHelperContext.HtmlEncoderPropertyName }); } } diff --git a/src/Microsoft.AspNet.Razor/CodeGenerators/GeneratedTagHelperContext.cs b/src/Microsoft.AspNet.Razor/CodeGenerators/GeneratedTagHelperContext.cs index 79380fddfb..2cf5606781 100644 --- a/src/Microsoft.AspNet.Razor/CodeGenerators/GeneratedTagHelperContext.cs +++ b/src/Microsoft.AspNet.Razor/CodeGenerators/GeneratedTagHelperContext.cs @@ -33,6 +33,8 @@ namespace Microsoft.AspNet.Razor.CodeGenerators TagHelperContentTypeName = "TagHelperContent"; WriteTagHelperAsyncMethodName = "WriteTagHelperAsync"; WriteTagHelperToAsyncMethodName = "WriteTagHelperToAsync"; + TagHelperContentGetContentMethodName = "GetContent"; + HtmlEncoderPropertyName = "HtmlEncoder"; } /// @@ -161,5 +163,15 @@ namespace Microsoft.AspNet.Razor.CodeGenerators /// . /// public string WriteTagHelperToAsyncMethodName { get; set; } + + /// + /// The name of the property containing the IHtmlEncoder. + /// + public string HtmlEncoderPropertyName { get; set; } + + /// + /// The name of the method used to convert a TagHelperContent into a . + /// + public string TagHelperContentGetContentMethodName { get; set; } } } \ No newline at end of file diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs index 567eee52e4..9bfbcd99aa 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs @@ -61,7 +61,7 @@ Write(ViewBag.DefaultInterval); #line hidden WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.ToString())); + __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.GetContent(HtmlEncoder))); __InputTagHelper.Type = **From custom attribute code renderer**: "text"; __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs index 9d0af57de4..5c676d85c2 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs @@ -62,7 +62,7 @@ Write(ViewBag.DefaultInterval); #line hidden WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.ToString())); + __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.GetContent(HtmlEncoder))); __InputTagHelper.Type = "text"; __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs index 83b2dc7565..94cc61db5d 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs @@ -123,7 +123,7 @@ WriteLiteral(checkbox); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Type = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Type = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; #line 16 "ComplexTagHelpers.cshtml" @@ -163,7 +163,7 @@ WriteLiteral(true ? "checkbox" : "anything"); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Type = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Type = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("tYPe", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; __tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); @@ -215,7 +215,7 @@ if(true) { #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Type = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Type = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; __tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/DynamicAttributeTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/DynamicAttributeTagHelpers.cs index ec3b35ca94..69ca2c691d 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/DynamicAttributeTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/DynamicAttributeTagHelpers.cs @@ -105,7 +105,7 @@ WriteLiteral(DateTime.Now); #line hidden WriteLiteral(" suffix"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Bound = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Bound = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("bound", __InputTagHelper.Bound); AddHtmlAttributeValues("unbound", __tagHelperExecutionContext, Tuple.Create(Tuple.Create("", 206), Tuple.Create("prefix", 206), true), Tuple.Create(Tuple.Create(" ", 212), Tuple.Create(DateTime.Now, 213), false), Tuple.Create(Tuple.Create(" ", 226), Tuple.Create("suffix", 227), true)); @@ -164,7 +164,7 @@ WriteLiteral(int.MaxValue); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Bound = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Bound = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("bound", __InputTagHelper.Bound); AddHtmlAttributeValues("unbound", __tagHelperExecutionContext, Tuple.Create(Tuple.Create("", 347), Tuple.Create(long.MinValue, 347), false), diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/EscapedTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/EscapedTagHelpers.cs index a6c99db975..16c89c4095 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/EscapedTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/EscapedTagHelpers.cs @@ -52,7 +52,7 @@ WriteLiteral(DateTime.Now); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper.Type = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper.Type = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; #line 6 "EscapedTagHelpers.cshtml" diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs index 235f76c9d5..79b6758d85 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs @@ -66,7 +66,7 @@ Write(ViewBag.DefaultInterval); #line hidden WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.ToString())); + __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer.GetContent(HtmlEncoder))); __InputTagHelper.Type = "text"; __tagHelperExecutionContext.AddTagHelperAttribute("type", __InputTagHelper.Type); __InputTagHelper2.Type = __InputTagHelper.Type; diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs index aa4fbe761f..dbf1e23cb1 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs @@ -182,7 +182,7 @@ WriteLiteral(literate); #line hidden WriteLiteral("?"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper2.StringDictionaryProperty["cumin"] = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper2.StringDictionaryProperty["cumin"] = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-cumin", __InputTagHelper2.StringDictionaryProperty["cumin"]); __InputTagHelper1.StringDictionaryProperty["cumin"] = __InputTagHelper2.StringDictionaryProperty["cumin"]; __tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs index f37ff319e4..ce4e7b7574 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs @@ -182,7 +182,7 @@ WriteLiteral(literate); #line hidden WriteLiteral("?"); __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __InputTagHelper1.StringDictionaryProperty["cumin"] = __tagHelperStringValueBuffer.ToString(); + __InputTagHelper1.StringDictionaryProperty["cumin"] = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-cumin", __InputTagHelper1.StringDictionaryProperty["cumin"]); __InputTagHelper2.StringDictionaryProperty["cumin"] = __InputTagHelper1.StringDictionaryProperty["cumin"]; __tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersInSection.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersInSection.cs index 73c34b2953..3fde959c8e 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersInSection.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersInSection.cs @@ -81,7 +81,7 @@ WriteLiteral(DateTime.Now); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __MyTagHelper.BoundProperty = __tagHelperStringValueBuffer.ToString(); + __MyTagHelper.BoundProperty = __tagHelperStringValueBuffer.GetContent(HtmlEncoder); __tagHelperExecutionContext.AddTagHelperAttribute("boundproperty", __MyTagHelper.BoundProperty); AddHtmlAttributeValues("unboundproperty", __tagHelperExecutionContext, Tuple.Create(Tuple.Create("", 188), Tuple.Create("Current", 188), true), Tuple.Create(Tuple.Create(" ", 195), Tuple.Create("Time:", 196), true), Tuple.Create(Tuple.Create(" ", 201), Tuple.Create(DateTime.Now, 202), false)); diff --git a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs index 0f2f0c8524..2e680e7e25 100644 --- a/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs +++ b/test/Microsoft.AspNet.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs @@ -51,7 +51,7 @@ Write(true); #line default #line hidden __tagHelperStringValueBuffer = EndTagHelperWritingScope(); - __tagHelperExecutionContext.AddHtmlAttribute("data-content", Html.Raw(__tagHelperStringValueBuffer.ToString())); + __tagHelperExecutionContext.AddHtmlAttribute("data-content", Html.Raw(__tagHelperStringValueBuffer.GetContent(HtmlEncoder))); __tagHelperExecutionContext.Output = await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(35, 85, false); await WriteTagHelperAsync(__tagHelperExecutionContext);