diff --git a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperExecutionContext.cs b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperExecutionContext.cs index e299b051ce..03969b28e0 100644 --- a/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperExecutionContext.cs +++ b/src/Microsoft.AspNetCore.Razor.Runtime/Runtime/TagHelpers/TagHelperExecutionContext.cs @@ -187,6 +187,20 @@ namespace Microsoft.AspNetCore.Razor.Runtime.TagHelpers _allAttributes.Add(attribute); } + /// + /// Tracks the bound attribute. + /// + /// The bound attribute. + public void AddTagHelperAttribute(TagHelperAttribute attribute) + { + if (attribute == null) + { + throw new ArgumentNullException(nameof(attribute)); + } + + _allAttributes.Add(attribute); + } + /// /// Clears the and updates its state with the provided values. /// diff --git a/src/Microsoft.AspNetCore.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs b/src/Microsoft.AspNetCore.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs index 65e54819e9..b04d7c5a9d 100644 --- a/src/Microsoft.AspNetCore.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs +++ b/src/Microsoft.AspNetCore.Razor/CodeGenerators/CSharpTagHelperCodeRenderer.cs @@ -331,6 +331,15 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators // If this attribute value has not been seen before, need to record its value. if (previousValueAccessor == null) { + var preallocatedAttributeValueChunk = attribute.Value as PreallocatedTagHelperAttributeChunk; + + if (preallocatedAttributeValueChunk != null) + { + RenderBoundPreAllocatedAttribute(preallocatedAttributeValueChunk, currentValueAccessor); + + return currentValueAccessor; + } + // Bufferable attributes are attributes that can have Razor code inside of them. Such // attributes have string values and may be calculated using a temporary TextWriter or other // buffer. @@ -376,6 +385,37 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators } } + // Render bound attributes that are of string type and are preallocated. + private void RenderBoundPreAllocatedAttribute( + PreallocatedTagHelperAttributeChunk preallocatedAttributeValueChunk, + string valueAccessor) + { + var attributeValueAccessor = string.Format( + CultureInfo.InvariantCulture, + "{0}.{1}", + preallocatedAttributeValueChunk.AttributeVariableAccessor, + _tagHelperContext.TagHelperAttributeValuePropertyName); + + _writer + .WriteStartAssignment(valueAccessor) + .Write("(string)") + .Write(attributeValueAccessor) + .WriteLine(";"); + + if (_designTimeMode) + { + // Execution contexts are a runtime feature. + return; + } + + _writer + .WriteStartInstanceMethodInvocation( + ExecutionContextVariableName, + _tagHelperContext.ExecutionContextAddTagHelperAttributeMethodName) + .Write(preallocatedAttributeValueChunk.AttributeVariableAccessor) + .WriteEndMethodInvocation(); + } + // Render assignment of attribute value to the value accessor. private void RenderNewAttributeValueAssignment( TagHelperAttributeDescriptor attributeDescriptor, @@ -735,7 +775,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators return false; } - private static bool IsDynamicAttributeValue(Chunk attributeValueChunk) + public static bool IsDynamicAttributeValue(Chunk attributeValueChunk) { var parentChunk = attributeValueChunk as ParentChunk; if (parentChunk != null) diff --git a/src/Microsoft.AspNetCore.Razor/CodeGenerators/GeneratedTagHelperContext.cs b/src/Microsoft.AspNetCore.Razor/CodeGenerators/GeneratedTagHelperContext.cs index df9b481585..b1fe26f76c 100644 --- a/src/Microsoft.AspNetCore.Razor/CodeGenerators/GeneratedTagHelperContext.cs +++ b/src/Microsoft.AspNetCore.Razor/CodeGenerators/GeneratedTagHelperContext.cs @@ -41,6 +41,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators ExecutionContextSetOutputContentAsyncMethodName = "SetOutputContentAsync"; TagHelperAttributeTypeName = "Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute"; EncodedHtmlStringTypeName = "Microsoft.AspNetCore.Html.HtmlString"; + TagHelperAttributeValuePropertyName = "Value"; } /// @@ -229,5 +230,10 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators /// The name of the type used to represent encoded content. /// public string EncodedHtmlStringTypeName { get; set; } + + /// + /// The name of the Value property of TagHelperAttribute. + /// + public string TagHelperAttributeValuePropertyName { get; set; } } } \ No newline at end of file diff --git a/src/Microsoft.AspNetCore.Razor/CodeGenerators/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs b/src/Microsoft.AspNetCore.Razor/CodeGenerators/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs index 24333817a3..64851406ff 100644 --- a/src/Microsoft.AspNetCore.Razor/CodeGenerators/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs +++ b/src/Microsoft.AspNetCore.Razor/CodeGenerators/Visitors/CSharpTagHelperFieldDeclarationVisitor.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Microsoft.AspNetCore.Razor.Chunks; +using Microsoft.AspNetCore.Razor.Compilation.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Internal; @@ -95,24 +96,28 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors if (!Context.Host.DesignTimeMode) { - PreAllocateUnboundTagHelperAttributes(chunk); + PreAllocateTagHelperAttributes(chunk); } // We need to dive deeper to ensure we pick up any nested tag helpers. Accept(chunk.Children); } - private void PreAllocateUnboundTagHelperAttributes(TagHelperChunk chunk) + private void PreAllocateTagHelperAttributes(TagHelperChunk chunk) { var boundAttributes = new HashSet(StringComparer.OrdinalIgnoreCase); for (var i = 0; i < chunk.Attributes.Count; i++) { var attribute = chunk.Attributes[i]; - var hasAssociatedDescriptors = chunk.Descriptors.Any(descriptor => - descriptor.Attributes.Any(attributeDescriptor => attributeDescriptor.IsNameMatch(attribute.Name))); + var associatedAttributeDescriptors = chunk.Descriptors.SelectMany(descriptor => descriptor.Attributes) + .Where(attributeDescriptor => attributeDescriptor.IsNameMatch(attribute.Name)); - // If there's no descriptors associated or we're hitting a bound attribute a second time. - if (!hasAssociatedDescriptors || !boundAttributes.Add(attribute.Name)) + // If there's no descriptors associated or is a repeated attribute with same name as a bound attribute, + // it is considered as an unbound attribute. + var isUnBoundAttribute = !associatedAttributeDescriptors.Any() || !boundAttributes.Add(attribute.Name); + + // Perf: We will preallocate TagHelperAttribute for unbound attributes and simple bound string valued attributes. + if (isUnBoundAttribute || CanPreallocateBoundAttribute(associatedAttributeDescriptors, attribute)) { string preAllocatedAttributeVariableName = null; @@ -120,7 +125,11 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors { Debug.Assert(attribute.Value == null); - var preAllocatedAttributeKey = new TagHelperAttributeKey(attribute.Name, value: null, valueStyle: attribute.ValueStyle); + var preAllocatedAttributeKey = new TagHelperAttributeKey( + attribute.Name, + value: null, + unBoundAttribute: isUnBoundAttribute, + valueStyle: attribute.ValueStyle); if (TryCachePreallocatedVariableName(preAllocatedAttributeKey, out preAllocatedAttributeVariableName)) { Writer @@ -141,7 +150,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors string plainText; if (CSharpTagHelperCodeRenderer.TryGetPlainTextValue(attribute.Value, out plainText)) { - var preAllocatedAttributeKey = new TagHelperAttributeKey(attribute.Name, plainText, attribute.ValueStyle); + var preAllocatedAttributeKey = new TagHelperAttributeKey(attribute.Name, plainText, isUnBoundAttribute, attribute.ValueStyle); if (TryCachePreallocatedVariableName(preAllocatedAttributeKey, out preAllocatedAttributeVariableName)) { Writer @@ -152,10 +161,23 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors .Write(" = ") .WriteStartNewObject("global::" + _tagHelperContext.TagHelperAttributeTypeName) .WriteStringLiteral(attribute.Name) - .WriteParameterSeparator() - .WriteStartNewObject("global::" + _tagHelperContext.EncodedHtmlStringTypeName) - .WriteStringLiteral(plainText) - .WriteEndMethodInvocation(endLine: false) + .WriteParameterSeparator(); + + if (isUnBoundAttribute) + { + // For unbound attributes, we need to create HtmlString. + Writer + .WriteStartNewObject("global::" + _tagHelperContext.EncodedHtmlStringTypeName) + .WriteStringLiteral(plainText) + .WriteEndMethodInvocation(endLine: false); + } + else + { + Writer.WriteStringLiteral(plainText); + + } + + Writer .WriteParameterSeparator() .Write($"global::{typeof(HtmlAttributeValueStyle).FullName}.{attribute.ValueStyle}") .WriteEndMethodInvocation(); @@ -177,6 +199,24 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors } } + private static bool CanPreallocateBoundAttribute( + IEnumerable associatedAttributeDescriptors, + TagHelperAttributeTracker attribute) + { + // If the attribute value is a Dynamic value, it cannot be preallocated. + if (CSharpTagHelperCodeRenderer.IsDynamicAttributeValue(attribute.Value)) + { + return false; + } + + // Only attributes that are associated with string typed properties can be preallocated. + var attributeName = attribute.Name; + var allStringProperties = associatedAttributeDescriptors + .All(attributeDescriptor => attributeDescriptor.IsStringProperty); + + return allStringProperties; + } + public override void Accept(Chunk chunk) { if (chunk == null) @@ -224,10 +264,11 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors private struct TagHelperAttributeKey : IEquatable { - public TagHelperAttributeKey(string name, string value, HtmlAttributeValueStyle valueStyle) + public TagHelperAttributeKey(string name, string value, bool unBoundAttribute, HtmlAttributeValueStyle valueStyle) { Name = name; Value = value; + UnBoundAttribute = unBoundAttribute; ValueStyle = valueStyle; } @@ -235,6 +276,8 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors public string Value { get; } + public bool UnBoundAttribute { get; } + public HtmlAttributeValueStyle ValueStyle { get; } public override int GetHashCode() @@ -242,6 +285,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors var hashCodeCombiner = HashCodeCombiner.Start(); hashCodeCombiner.Add(Name, StringComparer.Ordinal); hashCodeCombiner.Add(Value, StringComparer.Ordinal); + hashCodeCombiner.Add(UnBoundAttribute); hashCodeCombiner.Add(ValueStyle); return hashCodeCombiner.CombinedHash; @@ -263,6 +307,7 @@ namespace Microsoft.AspNetCore.Razor.CodeGenerators.Visitors { return string.Equals(Name, other.Name, StringComparison.Ordinal) && string.Equals(Value, other.Value, StringComparison.Ordinal) && + UnBoundAttribute == other.UnBoundAttribute && ValueStyle == other.ValueStyle; } } diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/AttributeTargetingTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/AttributeTargetingTagHelpers.cs index 50774acacd..dd83bbd973 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/AttributeTargetingTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/AttributeTargetingTagHelpers.cs @@ -19,6 +19,7 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("catchAll", new global::Microsoft.AspNetCore.Html.HtmlString("hi"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "checkbox", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public AttributeTargetingTagHelpers() { @@ -64,8 +65,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_2.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_2); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 6 "AttributeTargetingTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; @@ -90,8 +91,8 @@ __TestNamespace_InputTagHelper2.Checked = true; __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); - __TestNamespace_InputTagHelper.Type = "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_2.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_2); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 7 "AttributeTargetingTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs index 6a49042e16..ae34345363 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.CustomAttributeCodeGenerator.cs @@ -18,6 +18,8 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data", new global::Microsoft.AspNetCore.Html.HtmlString("-delay1000"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "text", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "checkbox", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public BasicTagHelpers() { @@ -66,8 +68,8 @@ namespace TestOutput WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndWriteTagHelperAttribute(); __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __TestNamespace_InputTagHelper.Type = **From custom attribute code renderer**: "text"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_3.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_3); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(190, 71, false); @@ -84,8 +86,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = **From custom attribute code renderer**: "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 7 "BasicTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = **From custom attribute code renderer**: true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.Prefixed.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.Prefixed.cs index 88b238ef9b..d0c91916b1 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.Prefixed.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.Prefixed.cs @@ -17,6 +17,7 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString("Hello World"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "checkbox", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public BasicTagHelpers.Prefixed() { @@ -41,8 +42,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_1.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_1); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 8 "BasicTagHelpers.Prefixed.cshtml" __TestNamespace_InputTagHelper2.Checked = true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs index e5e36b9712..79f8c21566 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/BasicTagHelpers.cs @@ -19,6 +19,8 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data", new global::Microsoft.AspNetCore.Html.HtmlString("-delay1000"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "text", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "checkbox", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public BasicTagHelpers() { @@ -67,8 +69,8 @@ namespace TestOutput WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndWriteTagHelperAttribute(); __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __TestNamespace_InputTagHelper.Type = "text"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_3.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_3); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(190, 71, false); @@ -85,8 +87,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 7 "BasicTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs index 92f15faf38..1d22386568 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/ComplexTagHelpers.cs @@ -16,13 +16,14 @@ namespace TestOutput private global::TestNamespace.PTagHelper __TestNamespace_PTagHelper = null; private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("value", new global::Microsoft.AspNetCore.Html.HtmlString(""), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("placeholder", new global::Microsoft.AspNetCore.Html.HtmlString("Enter in a new time..."), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("first value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("second value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("world"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "text", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("value", new global::Microsoft.AspNetCore.Html.HtmlString(""), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("placeholder", new global::Microsoft.AspNetCore.Html.HtmlString("Enter in a new time..."), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("first value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("second value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("unbound", new global::Microsoft.AspNetCore.Html.HtmlString("world"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_7 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public ComplexTagHelpers() { @@ -79,11 +80,11 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "text"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_0.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_0); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(278, 66, false); Write(__tagHelperExecutionContext.Output); @@ -307,14 +308,14 @@ __TestNamespace_InputTagHelper2.Checked = (@object); ); __TestNamespace_PTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_PTagHelper); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); #line 21 "ComplexTagHelpers.cshtml" __TestNamespace_PTagHelper.Age = DateTimeOffset.Now.Year - 1970; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("age", __TestNamespace_PTagHelper.Age, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); if (!__tagHelperExecutionContext.Output.IsContentModified) { @@ -338,8 +339,8 @@ __TestNamespace_InputTagHelper2.Checked = (@object); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_5); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); #line 26 "ComplexTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = (DateTimeOffset.Now.Year > 2014); @@ -502,7 +503,7 @@ __TestNamespace_PTagHelper.Age = 123; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("age", __TestNamespace_PTagHelper.Age, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_7); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); if (!__tagHelperExecutionContext.Output.IsContentModified) { diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateAttributeTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateAttributeTagHelpers.cs index 17c5a352a0..e391bebd50 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateAttributeTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateAttributeTagHelpers.cs @@ -18,11 +18,13 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("Age", new global::Microsoft.AspNetCore.Html.HtmlString("500"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("TYPE", new global::Microsoft.AspNetCore.Html.HtmlString("checkbox"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("checkbox"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("false"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("true"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("true"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "button", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("TYPE", new global::Microsoft.AspNetCore.Html.HtmlString("checkbox"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("checkbox"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("false"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "button", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_7 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("true"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_8 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("checked", new global::Microsoft.AspNetCore.Html.HtmlString("true"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public DuplicateAttributeTagHelpers() { @@ -47,10 +49,10 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "button"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_2.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_2); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(69, 39, false); Write(__tagHelperExecutionContext.Output); @@ -66,8 +68,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "button"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_2.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_2); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 5 "DuplicateAttributeTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; @@ -75,8 +77,8 @@ __TestNamespace_InputTagHelper2.Checked = true; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("checked", __TestNamespace_InputTagHelper2.Checked, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_5); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(114, 70, false); Write(__tagHelperExecutionContext.Output); @@ -92,8 +94,8 @@ __TestNamespace_InputTagHelper2.Checked = true; __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "button"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_6.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_6); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 6 "DuplicateAttributeTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; @@ -101,10 +103,10 @@ __TestNamespace_InputTagHelper2.Checked = true; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("checked", __TestNamespace_InputTagHelper2.Checked, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_5); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_7); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_8); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(190, 96, false); Write(__tagHelperExecutionContext.Output); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateTargetTagHelper.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateTargetTagHelper.cs index 194ed9a2cc..c4274767f5 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateTargetTagHelper.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/DuplicateTargetTagHelper.cs @@ -15,6 +15,7 @@ namespace TestOutput private global::Microsoft.AspNetCore.Razor.Runtime.TagHelperScopeManager __tagHelperScopeManager = null; private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.CatchAllTagHelper __TestNamespace_CatchAllTagHelper = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "checkbox", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public DuplicateTargetTagHelper() { @@ -35,8 +36,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); - __TestNamespace_InputTagHelper.Type = "checkbox"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_0.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_0); __TestNamespace_CatchAllTagHelper.Type = __TestNamespace_InputTagHelper.Type; #line 3 "DuplicateTargetTagHelper.cshtml" __TestNamespace_InputTagHelper.Checked = true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/EmptyAttributeTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/EmptyAttributeTagHelpers.cs index 671bedf253..e1dda8f7ec 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/EmptyAttributeTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/EmptyAttributeTagHelpers.cs @@ -15,7 +15,8 @@ namespace TestOutput private global::Microsoft.AspNetCore.Razor.Runtime.TagHelperScopeManager __tagHelperScopeManager = null; private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString(""), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString(""), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.PTagHelper __TestNamespace_PTagHelper = null; #line hidden public EmptyAttributeTagHelpers() @@ -37,8 +38,8 @@ namespace TestOutput __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = ""; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_0.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_0); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 4 "EmptyAttributeTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = ; @@ -46,7 +47,7 @@ __TestNamespace_InputTagHelper2.Checked = ; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("checked", __TestNamespace_InputTagHelper2.Checked, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(38, 34, false); Write(__tagHelperExecutionContext.Output); @@ -66,8 +67,8 @@ __TestNamespace_InputTagHelper2.Checked = ; __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = ""; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_0.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_0); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 6 "EmptyAttributeTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = ; @@ -75,7 +76,7 @@ __TestNamespace_InputTagHelper2.Checked = ; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("checked", __TestNamespace_InputTagHelper2.Checked, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(98, 34, false); Write(__tagHelperExecutionContext.Output); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/MinimizedTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/MinimizedTagHelpers.cs index 92b389b9af..f752d66320 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/MinimizedTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/MinimizedTagHelpers.cs @@ -18,8 +18,12 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString("btn"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-unbound-required"); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("catchall-unbound-required", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-unbound-required", new global::Microsoft.AspNetCore.Html.HtmlString("hello2"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-bound-required-string", "hello", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("catchall-bound-string", "world", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-bound-required-string", "hello2", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("catchall-unbound-required", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_7 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-unbound-required", new global::Microsoft.AspNetCore.Html.HtmlString("hello2"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_8 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("input-bound-required-string", "world", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public MinimizedTagHelpers() { @@ -62,8 +66,8 @@ namespace TestOutput __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); - __TestNamespace_InputTagHelper.BoundRequiredString = "hello"; - __tagHelperExecutionContext.AddTagHelperAttribute("input-bound-required-string", __TestNamespace_InputTagHelper.BoundRequiredString, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.BoundRequiredString = (string)__tagHelperAttribute_3.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_3); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(161, 119, false); Write(__tagHelperExecutionContext.Output); @@ -82,10 +86,10 @@ namespace TestOutput __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); - __TestNamespace_CatchAllTagHelper.BoundRequiredString = "world"; - __tagHelperExecutionContext.AddTagHelperAttribute("catchall-bound-string", __TestNamespace_CatchAllTagHelper.BoundRequiredString, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __TestNamespace_InputTagHelper.BoundRequiredString = "hello2"; - __tagHelperExecutionContext.AddTagHelperAttribute("input-bound-required-string", __TestNamespace_InputTagHelper.BoundRequiredString, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_CatchAllTagHelper.BoundRequiredString = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); + __TestNamespace_InputTagHelper.BoundRequiredString = (string)__tagHelperAttribute_5.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_5); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(286, 176, false); Write(__tagHelperExecutionContext.Output); @@ -102,11 +106,11 @@ namespace TestOutput __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_4); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_7); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); - __TestNamespace_InputTagHelper.BoundRequiredString = "world"; - __tagHelperExecutionContext.AddTagHelperAttribute("input-bound-required-string", __TestNamespace_InputTagHelper.BoundRequiredString, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.BoundRequiredString = (string)__tagHelperAttribute_8.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_8); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(468, 206, false); Write(__tagHelperExecutionContext.Output); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs index 0c85a37508..a28ce753a2 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/NestedScriptTagTagHelpers.cs @@ -18,6 +18,7 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-delay", new global::Microsoft.AspNetCore.Html.HtmlString("1000"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "text", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public NestedScriptTagTagHelpers() { @@ -67,8 +68,8 @@ namespace TestOutput WriteLiteral(" + 1"); __tagHelperStringValueBuffer = EndWriteTagHelperAttribute(); __tagHelperExecutionContext.AddHtmlAttribute("data-interval", Html.Raw(__tagHelperStringValueBuffer), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __TestNamespace_InputTagHelper.Type = "text"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_2.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_2); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; #line 8 "NestedScriptTagTagHelpers.cshtml" __TestNamespace_InputTagHelper2.Checked = true; diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs index 2b5be55a15..5827739961 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.Reversed.cs @@ -19,6 +19,9 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("password"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("radio"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("int-prefix-salt", new global::Microsoft.AspNetCore.Html.HtmlString("8"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-grabber", "string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-paprika", "another string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-thyme", "string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public PrefixedAttributeTagHelpers() { @@ -171,11 +174,11 @@ __TestNamespace_InputTagHelper2.IntDictionaryProperty["salt"] = 37; __tagHelperExecutionContext.AddTagHelperAttribute("int-prefix-pepper", __TestNamespace_InputTagHelper2.IntDictionaryProperty["pepper"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); __TestNamespace_InputTagHelper1.IntDictionaryProperty["pepper"] = __TestNamespace_InputTagHelper2.IntDictionaryProperty["pepper"]; __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); - __TestNamespace_InputTagHelper2.StringDictionaryProperty["grabber"] = "string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-grabber", __TestNamespace_InputTagHelper2.StringDictionaryProperty["grabber"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper2.StringDictionaryProperty["grabber"] = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); __TestNamespace_InputTagHelper1.StringProperty = __TestNamespace_InputTagHelper2.StringDictionaryProperty["grabber"]; - __TestNamespace_InputTagHelper2.StringDictionaryProperty["paprika"] = "another string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-paprika", __TestNamespace_InputTagHelper2.StringDictionaryProperty["paprika"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper2.StringDictionaryProperty["paprika"] = (string)__tagHelperAttribute_5.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_5); __TestNamespace_InputTagHelper1.StringDictionaryProperty["paprika"] = __TestNamespace_InputTagHelper2.StringDictionaryProperty["paprika"]; BeginWriteTagHelperAttribute(); WriteLiteral("literate "); @@ -227,8 +230,8 @@ __TestNamespace_InputTagHelper2.IntDictionaryProperty["value"] = 37; #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("int-prefix-value", __TestNamespace_InputTagHelper2.IntDictionaryProperty["value"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); __TestNamespace_InputTagHelper1.IntDictionaryProperty["value"] = __TestNamespace_InputTagHelper2.IntDictionaryProperty["value"]; - __TestNamespace_InputTagHelper2.StringDictionaryProperty["thyme"] = "string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-thyme", __TestNamespace_InputTagHelper2.StringDictionaryProperty["thyme"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper2.StringDictionaryProperty["thyme"] = (string)__tagHelperAttribute_6.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_6); __TestNamespace_InputTagHelper1.StringDictionaryProperty["thyme"] = __TestNamespace_InputTagHelper2.StringDictionaryProperty["thyme"]; await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(799, 60, false); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs index 09f52b9b0c..1ec8d1f6c9 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/PrefixedAttributeTagHelpers.cs @@ -19,6 +19,9 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("password"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", new global::Microsoft.AspNetCore.Html.HtmlString("radio"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("int-prefix-salt", new global::Microsoft.AspNetCore.Html.HtmlString("8"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-grabber", "string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-paprika", "another string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("string-prefix-thyme", "string", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public PrefixedAttributeTagHelpers() { @@ -171,11 +174,11 @@ __TestNamespace_InputTagHelper1.IntDictionaryProperty["salt"] = 37; __tagHelperExecutionContext.AddTagHelperAttribute("int-prefix-pepper", __TestNamespace_InputTagHelper1.IntDictionaryProperty["pepper"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); __TestNamespace_InputTagHelper2.IntDictionaryProperty["pepper"] = __TestNamespace_InputTagHelper1.IntDictionaryProperty["pepper"]; __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); - __TestNamespace_InputTagHelper1.StringProperty = "string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-grabber", __TestNamespace_InputTagHelper1.StringProperty, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper1.StringProperty = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); __TestNamespace_InputTagHelper2.StringDictionaryProperty["grabber"] = __TestNamespace_InputTagHelper1.StringProperty; - __TestNamespace_InputTagHelper1.StringDictionaryProperty["paprika"] = "another string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-paprika", __TestNamespace_InputTagHelper1.StringDictionaryProperty["paprika"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper1.StringDictionaryProperty["paprika"] = (string)__tagHelperAttribute_5.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_5); __TestNamespace_InputTagHelper2.StringDictionaryProperty["paprika"] = __TestNamespace_InputTagHelper1.StringDictionaryProperty["paprika"]; BeginWriteTagHelperAttribute(); WriteLiteral("literate "); @@ -227,8 +230,8 @@ __TestNamespace_InputTagHelper1.IntDictionaryProperty["value"] = 37; #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("int-prefix-value", __TestNamespace_InputTagHelper1.IntDictionaryProperty["value"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); __TestNamespace_InputTagHelper2.IntDictionaryProperty["value"] = __TestNamespace_InputTagHelper1.IntDictionaryProperty["value"]; - __TestNamespace_InputTagHelper1.StringDictionaryProperty["thyme"] = "string"; - __tagHelperExecutionContext.AddTagHelperAttribute("string-prefix-thyme", __TestNamespace_InputTagHelper1.StringDictionaryProperty["thyme"], global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper1.StringDictionaryProperty["thyme"] = (string)__tagHelperAttribute_6.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_6); __TestNamespace_InputTagHelper2.StringDictionaryProperty["thyme"] = __TestNamespace_InputTagHelper1.StringDictionaryProperty["thyme"]; await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(799, 60, false); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/SymbolBoundAttributes.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/SymbolBoundAttributes.cs index aeb0b18f45..59bf02545e 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/SymbolBoundAttributes.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/SymbolBoundAttributes.cs @@ -19,9 +19,11 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("[(item)]", new global::Microsoft.AspNetCore.Html.HtmlString("items"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("(click)", new global::Microsoft.AspNetCore.Html.HtmlString("doSomething()"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("(^click)", new global::Microsoft.AspNetCore.Html.HtmlString("doSomething()"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("*something", new global::Microsoft.AspNetCore.Html.HtmlString("value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("#localminimized"); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_7 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("#local", new global::Microsoft.AspNetCore.Html.HtmlString("value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("*something", "value", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_6 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("*something", new global::Microsoft.AspNetCore.Html.HtmlString("value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_7 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("#localminimized"); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_8 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("#local", "value", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_9 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("#local", new global::Microsoft.AspNetCore.Html.HtmlString("value"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public SymbolBoundAttributes() { @@ -142,9 +144,9 @@ __TestNamespace_CatchAllTagHelper.Event2 = doSomething(); __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); - __TestNamespace_CatchAllTagHelper.StringProperty1 = "value"; - __tagHelperExecutionContext.AddTagHelperAttribute("*something", __TestNamespace_CatchAllTagHelper.StringProperty1, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_5); + __TestNamespace_CatchAllTagHelper.StringProperty1 = (string)__tagHelperAttribute_5.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_5); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); if (!__tagHelperExecutionContext.Output.IsContentModified) { @@ -163,7 +165,7 @@ __TestNamespace_CatchAllTagHelper.Event2 = doSomething(); __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_6); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_7); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(607, 33, false); Write(__tagHelperExecutionContext.Output); @@ -178,9 +180,9 @@ __TestNamespace_CatchAllTagHelper.Event2 = doSomething(); __TestNamespace_CatchAllTagHelper = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_CatchAllTagHelper); __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_0); - __TestNamespace_CatchAllTagHelper.StringProperty2 = "value"; - __tagHelperExecutionContext.AddTagHelperAttribute("#local", __TestNamespace_CatchAllTagHelper.StringProperty2, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_7); + __TestNamespace_CatchAllTagHelper.StringProperty2 = (string)__tagHelperAttribute_8.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_8); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_9); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(642, 47, false); Write(__tagHelperExecutionContext.Output); diff --git a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs index 0ae13f6907..4f072e2088 100644 --- a/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs +++ b/test/Microsoft.AspNetCore.Razor.Test/TestFiles/CodeGenerator/Output/TagHelpersWithWeirdlySpacedAttributes.cs @@ -17,9 +17,11 @@ namespace TestOutput private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_0 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("class", new global::Microsoft.AspNetCore.Html.HtmlString("Hello World"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); private global::TestNamespace.InputTagHelper __TestNamespace_InputTagHelper = null; private global::TestNamespace.InputTagHelper2 __TestNamespace_InputTagHelper2 = null; - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("hello2"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); - private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("blah"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_1 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "text", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_2 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("hello"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_3 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("hello2"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_4 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("type", "password", global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + private static readonly global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute __tagHelperAttribute_5 = new global::Microsoft.AspNetCore.Razor.TagHelpers.TagHelperAttribute("data-content", new global::Microsoft.AspNetCore.Html.HtmlString("blah"), global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); #line hidden public TagHelpersWithWeirdlySpacedAttributes() { @@ -75,10 +77,10 @@ __TestNamespace_PTagHelper.Age = 1337; __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "text"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.SingleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_1.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_1); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_1); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(122, 47, false); Write(__tagHelperExecutionContext.Output); @@ -98,7 +100,7 @@ __TestNamespace_PTagHelper.Age = 1234; #line default #line hidden __tagHelperExecutionContext.AddTagHelperAttribute("age", __TestNamespace_PTagHelper.Age, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_2); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(173, 46, false); Write(__tagHelperExecutionContext.Output); @@ -114,10 +116,10 @@ __TestNamespace_PTagHelper.Age = 1234; __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper); __TestNamespace_InputTagHelper2 = CreateTagHelper(); __tagHelperExecutionContext.Add(__TestNamespace_InputTagHelper2); - __TestNamespace_InputTagHelper.Type = "password"; - __tagHelperExecutionContext.AddTagHelperAttribute("type", __TestNamespace_InputTagHelper.Type, global::Microsoft.AspNetCore.Razor.TagHelpers.HtmlAttributeValueStyle.DoubleQuotes); + __TestNamespace_InputTagHelper.Type = (string)__tagHelperAttribute_4.Value; + __tagHelperExecutionContext.AddTagHelperAttribute(__tagHelperAttribute_4); __TestNamespace_InputTagHelper2.Type = __TestNamespace_InputTagHelper.Type; - __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_3); + __tagHelperExecutionContext.AddHtmlAttribute(__tagHelperAttribute_5); await __tagHelperRunner.RunAsync(__tagHelperExecutionContext); Instrumentation.BeginContext(223, 51, false); Write(__tagHelperExecutionContext.Output);