diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
index 611b2a42cd..4d569cf620 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
@@ -97,8 +97,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
if (tagBuilder != null)
{
- // We don't want to do a full merge because we want the TagHelper content to take precedence.
- output.Merge(tagBuilder);
+ output.MergeAttributes(tagBuilder);
+ output.Content += tagBuilder.InnerHtml;
+ output.SelfClosing = false;
}
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
index 0255cf9d1f..08dd948650 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
@@ -199,8 +199,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
// This TagBuilder contains the one element of interest. Since this is not the "checkbox"
// special-case, output is a self-closing element and can merge the TagBuilder in directly.
+ output.MergeAttributes(tagBuilder);
+ output.Content += tagBuilder.InnerHtml;
output.SelfClosing = true;
- output.Merge(tagBuilder);
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
index 33cc3f047a..1f78745ff2 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/LabelTagHelper.cs
@@ -48,8 +48,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
output.Content = tagBuilder.InnerHtml;
}
-
- output.TagName = tagBuilder.TagName;
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
index d3ecbd7034..e197713458 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/SelectTagHelper.cs
@@ -137,8 +137,9 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
if (tagBuilder != null)
{
+ output.MergeAttributes(tagBuilder);
+ output.Content += tagBuilder.InnerHtml;
output.SelfClosing = false;
- output.Merge(tagBuilder);
}
// Whether or not (not being highly unlikely) we generate anything, could update contained
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/TagHelperOutputExtensions.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/TagHelperOutputExtensions.cs
index 4c6e2baa85..639680b493 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/TagHelperOutputExtensions.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/TagHelperOutputExtensions.cs
@@ -60,23 +60,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
return prefixedAttributes;
}
- ///
- /// Merges the given into the .
- ///
- /// The this method extends.
- /// The to merge.
- /// 's has the given
- /// s appended to it. This is to ensure
- /// multiple s running on the same HTML tag don't overwrite each other; therefore,
- /// this method may not be appropriate for all scenarios.
- public static void Merge(this TagHelperOutput tagHelperOutput, TagBuilder tagBuilder)
- {
- tagHelperOutput.TagName = tagBuilder.TagName;
- tagHelperOutput.Content += tagBuilder.InnerHtml;
-
- MergeAttributes(tagHelperOutput, tagBuilder);
- }
-
///
/// Merges the given 's into the
/// .
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/TextAreaTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/TextAreaTagHelper.cs
index 10d6b05c99..586a9ed3a4 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/TextAreaTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/TextAreaTagHelper.cs
@@ -47,7 +47,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
output.MergeAttributes(tagBuilder);
output.SelfClosing = false;
- output.TagName = tagBuilder.TagName;
}
}
}
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
index 00661226c3..b3050403c6 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/AnchorTagHelperTest.cs
@@ -18,6 +18,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
public async Task ProcessAsync_GeneratesExpectedOutput()
{
// Arrange
+ var expectedTagName = "not-a";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
var anchorTagHelper = new AnchorTagHelper
{
@@ -40,7 +41,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "protocol", "http" }
});
var output = new TagHelperOutput(
- "a",
+ expectedTagName,
attributes: new Dictionary
{
{ "id", "myanchor" },
@@ -75,7 +76,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("href"));
Assert.Equal("home/index", attribute.Value);
Assert.Equal("Something", output.Content);
- Assert.Equal("a", output.TagName);
+ Assert.Equal(expectedTagName, output.TagName);
}
[Fact]
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
index dda8c99644..ca5aac1902 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
@@ -21,6 +21,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
public async Task ProcessAsync_GeneratesExpectedOutput()
{
// Arrange
+ var expectedTagName = "not-form";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
var formTagHelper = new FormTagHelper
{
@@ -40,7 +41,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "anti-forgery", true }
});
var output = new TagHelperOutput(
- "form",
+ expectedTagName,
attributes: new Dictionary
{
{ "id", "myform" },
@@ -78,7 +79,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
attribute = Assert.Single(output.Attributes, kvp => kvp.Key.Equals("action"));
Assert.Equal("home/index", attribute.Value);
Assert.Equal(expectedContent, output.Content);
- Assert.Equal("form", output.TagName);
+ Assert.Equal(expectedTagName, output.TagName);
}
[Theory]
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
index c0366d1299..674ceb6e33 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
@@ -91,7 +91,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "value", expectedValue },
};
var expectedContent = "original content";
- var expectedTagName = "input";
+ var expectedTagName = "not-input";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
@@ -104,7 +104,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
{ "class", "form-control" },
};
- var output = new TagHelperOutput("original tag name", htmlAttributes, expectedContent)
+ var output = new TagHelperOutput(expectedTagName, htmlAttributes, expectedContent)
{
SelfClosing = false,
};
@@ -145,7 +145,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "value", "2014-10-15T23:24:19.000-7:00" },
};
var expectedContent = "original content";
- var expectedTagName = "original tag name";
+ var expectedTagName = "input";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
var metadata = metadataProvider.GetMetadataForProperty(
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
index 4dab736b23..e631a2ad11 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/LabelTagHelperTest.cs
@@ -97,6 +97,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
TagHelperOutputContent tagHelperOutputContent)
{
// Arrange
+ var expectedTagName = "not-label";
var expectedAttributes = new Dictionary
{
{ "class", "form-control" },
@@ -117,8 +118,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
{ "class", "form-control" },
};
- var output = new TagHelperOutput("A random tag name", htmlAttributes, tagHelperOutputContent.OriginalContent);
- var expectedTagName = "label";
+ var output = new TagHelperOutput(expectedTagName, htmlAttributes, tagHelperOutputContent.OriginalContent);
var htmlGenerator = new TestableHtmlGenerator(metadataProvider);
var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
tagHelper.ViewContext = viewContext;
@@ -143,7 +143,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "class", "form-control" },
};
var expectedContent = "original content";
- var expectedTagName = "original tag name";
+ var expectedTagName = "label";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
var metadata = metadataProvider.GetMetadataForProperty(
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
index a4a13790e5..00c31f95b0 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/OptionTagHelperTest.cs
@@ -128,7 +128,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
{ "label", "my-label" },
};
- var originalTagName = "not-option";
+ var expectedTagName = "not-option";
var contextAttributes = new Dictionary
{
@@ -137,7 +137,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "value", value },
};
var tagHelperContext = new TagHelperContext(contextAttributes);
- var output = new TagHelperOutput(originalTagName, originalAttributes, originalContent)
+ var output = new TagHelperOutput(expectedTagName, originalAttributes, originalContent)
{
SelfClosing = false,
};
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
index da26800d39..5ca9ad1e68 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/SelectTagHelperTest.cs
@@ -167,7 +167,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "class", "form-control" },
};
var originalContent = "original content";
- var originalTagName = "not-select";
var expectedAttributes = new Dictionary(originalAttributes)
{
@@ -176,7 +175,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "valid", "from validation attributes" },
};
var expectedContent = originalContent;
- var expectedTagName = "select";
+ var expectedTagName = "not-select";
var metadataProvider = new DataAnnotationsModelMetadataProvider();
@@ -185,7 +184,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var modelExpression = new ModelExpression(nameAndId.Name, metadata);
var tagHelperContext = new TagHelperContext(new Dictionary());
- var output = new TagHelperOutput(originalTagName, originalAttributes, expectedContent)
+ var output = new TagHelperOutput(expectedTagName, originalAttributes, expectedContent)
{
SelfClosing = true,
};
@@ -238,7 +237,6 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{ "class", "form-control" },
};
var originalContent = "original content";
- var originalTagName = "not-select";
var expectedAttributes = new Dictionary(originalAttributes)
{
@@ -256,7 +254,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var modelExpression = new ModelExpression(nameAndId.Name, metadata);
var tagHelperContext = new TagHelperContext(new Dictionary());
- var output = new TagHelperOutput(originalTagName, originalAttributes, originalContent)
+ var output = new TagHelperOutput(expectedTagName, originalAttributes, originalContent)
{
SelfClosing = true,
};
@@ -313,10 +311,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var originalAttributes = new Dictionary();
var content = "original content";
var propertyName = "Property1";
- var tagName = "not-select";
+ var expectedTagName = "select";
var tagHelperContext = new TagHelperContext(contextAttributes);
- var output = new TagHelperOutput(tagName, originalAttributes, content);
+ var output = new TagHelperOutput(expectedTagName, originalAttributes, content);
// TODO: In real (model => model) scenario, ModelExpression should have name "" and
// TemplateInfo.HtmlFieldPrefix should be "Property1" but empty ModelExpression name is not currently
@@ -376,7 +374,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var originalAttributes = new Dictionary();
var content = "original content";
var propertyName = "Property1";
- var tagName = "not-select";
+ var tagName = "select";
var tagHelperContext = new TagHelperContext(contextAttributes);
var output = new TagHelperOutput(tagName, originalAttributes, content);
@@ -440,7 +438,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var expectedAttributes = new Dictionary(originalAttributes);
expectedAttributes[attributeName] = (string)contextAttributes[attributeName];
var expectedContent = "original content";
- var expectedTagName = "not-select";
+ var expectedTagName = "select";
var tagHelperContext = new TagHelperContext(contextAttributes);
var output = new TagHelperOutput(expectedTagName, originalAttributes, expectedContent)
@@ -470,11 +468,11 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var contextAttributes = new Dictionary();
var originalAttributes = new Dictionary();
var content = "original content";
- var tagName = "not-select";
+ var expectedTagName = "select";
var expectedMessage = "Cannot determine body for