diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
index 44f87cbcf3..8a48675a4d 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/FormTagHelper.cs
@@ -163,7 +163,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var antiforgeryTag = Generator.GenerateAntiforgery(ViewContext);
if (antiforgeryTag != null)
{
- output.PostContent.Append(antiforgeryTag.ToString());
+ output.PostContent.Append(antiforgeryTag);
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs b/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
index 3b520c46fb..e0c39ac497 100644
--- a/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.TagHelpers/InputTagHelper.cs
@@ -236,13 +236,13 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
}
}
- var tagBuilder = Generator.GenerateCheckBox(
+ var checkBoxTag = Generator.GenerateCheckBox(
ViewContext,
modelExplorer,
For.Name,
isChecked: null,
htmlAttributes: htmlAttributes);
- if (tagBuilder != null)
+ if (checkBoxTag != null)
{
// Do not generate current element's attributes or tags. Instead put both and
// into the output's Content.
@@ -251,12 +251,14 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var renderingMode =
output.TagMode == TagMode.SelfClosing ? TagRenderMode.SelfClosing : TagRenderMode.StartTag;
- output.Content.Append(tagBuilder.ToHtmlContent(renderingMode));
+ checkBoxTag.TagRenderMode = renderingMode;
+ output.Content.Append(checkBoxTag);
- tagBuilder = Generator.GenerateHiddenForCheckbox(ViewContext, modelExplorer, For.Name);
- if (tagBuilder != null)
+ var hiddenForCheckboxTag = Generator.GenerateHiddenForCheckbox(ViewContext, modelExplorer, For.Name);
+ if (hiddenForCheckboxTag != null)
{
- output.Content.Append(tagBuilder.ToHtmlContent(renderingMode));
+ hiddenForCheckboxTag.TagRenderMode = renderingMode;
+ output.Content.Append(hiddenForCheckboxTag);
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultDisplayTemplates.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultDisplayTemplates.cs
index ac27ae1ee9..835d78da41 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultDisplayTemplates.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultDisplayTemplates.cs
@@ -41,7 +41,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
inputTag.Attributes["checked"] = "checked";
}
- return inputTag.ToHtmlContent(TagRenderMode.SelfClosing);
+ inputTag.TagRenderMode = TagRenderMode.SelfClosing;
+ return inputTag;
}
private static IHtmlContent BooleanTemplateDropDownList(IHtmlHelper htmlHelper, bool? value)
@@ -52,17 +53,13 @@ namespace Microsoft.AspNet.Mvc.Rendering
selectTag.Attributes["disabled"] = "disabled";
var content = new BufferedHtmlContent();
- content.Append(selectTag.ToHtmlContent(TagRenderMode.StartTag));
-
foreach (var item in TriStateValues(value))
{
- content.Append(
- DefaultHtmlGenerator.GenerateOption(item, item.Text)
- .ToHtmlContent(TagRenderMode.Normal));
+ content.Append(DefaultHtmlGenerator.GenerateOption(item, item.Text));
}
- content.Append(selectTag.ToHtmlContent(TagRenderMode.EndTag));
- return content;
+ selectTag.InnerHtml = content;
+ return selectTag;
}
// Will soon need to be shared with the default editor templates implementations.
@@ -208,7 +205,6 @@ namespace Microsoft.AspNet.Mvc.Rendering
var viewData = htmlHelper.ViewData;
var templateInfo = viewData.TemplateInfo;
var modelExplorer = viewData.ModelExplorer;
- var content = new BufferedHtmlContent();
if (modelExplorer.Model == null)
{
@@ -229,6 +225,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
var serviceProvider = htmlHelper.ViewContext.HttpContext.RequestServices;
var viewEngine = serviceProvider.GetRequiredService();
+ var content = new BufferedHtmlContent();
foreach (var propertyExplorer in modelExplorer.Properties)
{
var propertyMetadata = propertyExplorer.Metadata;
@@ -237,25 +234,6 @@ namespace Microsoft.AspNet.Mvc.Rendering
continue;
}
- var divTag = new TagBuilder("div");
-
- if (!propertyMetadata.HideSurroundingHtml)
- {
- var label = propertyMetadata.GetDisplayName();
- if (!string.IsNullOrEmpty(label))
- {
- divTag.SetInnerText(label);
- divTag.AddCssClass("display-label");
- content.AppendLine(divTag.ToHtmlContent(TagRenderMode.Normal));
-
- // Reset divTag for reuse.
- divTag.Attributes.Clear();
- }
-
- divTag.AddCssClass("display-field");
- content.Append(divTag.ToHtmlContent(TagRenderMode.StartTag));
- }
-
var templateBuilder = new TemplateBuilder(
viewEngine,
htmlHelper.ViewContext,
@@ -266,11 +244,26 @@ namespace Microsoft.AspNet.Mvc.Rendering
readOnly: true,
additionalViewData: null);
- content.Append(templateBuilder.Build());
-
+ var templateBuilderResult = templateBuilder.Build();
if (!propertyMetadata.HideSurroundingHtml)
{
- content.AppendLine(divTag.ToHtmlContent(TagRenderMode.EndTag));
+ var label = propertyMetadata.GetDisplayName();
+ if (!string.IsNullOrEmpty(label))
+ {
+ var labelTag = new TagBuilder("div");
+ labelTag.SetInnerText(label);
+ labelTag.AddCssClass("display-label");
+ content.AppendLine(labelTag);
+ }
+
+ var valueDivTag = new TagBuilder("div");
+ valueDivTag.AddCssClass("display-field");
+ valueDivTag.InnerHtml = templateBuilderResult;
+ content.AppendLine(valueDivTag);
+ }
+ else
+ {
+ content.Append(templateBuilderResult);
}
}
@@ -312,8 +305,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
var hyperlinkTag = new TagBuilder("a");
hyperlinkTag.MergeAttribute("href", uriString);
hyperlinkTag.SetInnerText(linkedText);
-
- return hyperlinkTag.ToHtmlContent(TagRenderMode.Normal);
+ return hyperlinkTag;
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultEditorTemplates.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultEditorTemplates.cs
index a2c7b60c6d..9cbffa8f13 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultEditorTemplates.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultEditorTemplates.cs
@@ -256,28 +256,6 @@ namespace Microsoft.AspNet.Mvc.Rendering
continue;
}
- var divTag = new TagBuilder("div");
-
- if (!propertyMetadata.HideSurroundingHtml)
- {
- var label = htmlHelper.Label(
- propertyMetadata.PropertyName,
- labelText: null,
- htmlAttributes: null);
- if (!string.IsNullOrEmpty(label.ToString()))
- {
- divTag.AddCssClass("editor-label");
- divTag.InnerHtml = label; // already escaped
- content.AppendLine(divTag.ToHtmlContent(TagRenderMode.Normal));
-
- // Reset divTag for reuse.
- divTag.Attributes.Clear();
- }
-
- divTag.AddCssClass("editor-field");
- content.Append(divTag.ToHtmlContent(TagRenderMode.StartTag));
- }
-
var templateBuilder = new TemplateBuilder(
viewEngine,
htmlHelper.ViewContext,
@@ -288,18 +266,36 @@ namespace Microsoft.AspNet.Mvc.Rendering
readOnly: false,
additionalViewData: null);
- content.Append(templateBuilder.Build());
-
+ var templateBuilderResult = templateBuilder.Build();
if (!propertyMetadata.HideSurroundingHtml)
{
- content.Append(" ");
- content.Append(htmlHelper.ValidationMessage(
+ var label = htmlHelper.Label(propertyMetadata.PropertyName, labelText: null, htmlAttributes: null);
+ if (!string.IsNullOrEmpty(label.ToString()))
+ {
+ var labelTag = new TagBuilder("div");
+ labelTag.AddCssClass("editor-label");
+ labelTag.InnerHtml = label;
+ content.AppendLine(labelTag);
+ }
+
+ var valueDivTag = new TagBuilder("div");
+ valueDivTag.AddCssClass("editor-field");
+
+ var innerContent = new BufferedHtmlContent();
+ innerContent.Append(templateBuilderResult);
+ innerContent.Append(" ");
+ innerContent.Append(htmlHelper.ValidationMessage(
propertyMetadata.PropertyName,
message: null,
htmlAttributes: null,
tag: null));
+ valueDivTag.InnerHtml = innerContent;
- content.AppendLine(divTag.ToHtmlContent(TagRenderMode.EndTag));
+ content.AppendLine(valueDivTag);
+ }
+ else
+ {
+ content.Append(templateBuilderResult);
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultHtmlGenerator.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultHtmlGenerator.cs
index 9fd4cf2698..32099a4242 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultHtmlGenerator.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/DefaultHtmlGenerator.cs
@@ -157,6 +157,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
var tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttribute("type", GetInputTypeString(InputType.Hidden));
tagBuilder.MergeAttribute("value", "false");
+ tagBuilder.TagRenderMode = TagRenderMode.SelfClosing;
var fullName = GetFullHtmlFieldName(viewContext, expression);
tagBuilder.MergeAttribute("name", fullName);
@@ -673,7 +674,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
}
var messageTag = new TagBuilder(headerTag);
messageTag.SetInnerText(message);
- wrappedMessage.AppendLine(messageTag.ToHtmlContent(TagRenderMode.Normal));
+ wrappedMessage.AppendLine(messageTag);
}
else
{
@@ -696,7 +697,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
{
var listItem = new TagBuilder("li");
listItem.SetInnerText(errorText);
- htmlSummary.AppendLine(listItem.ToHtmlContent(TagRenderMode.Normal));
+ htmlSummary.AppendLine(listItem);
isHtmlSummaryModified = true;
}
}
@@ -726,7 +727,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
var innerContent = new BufferedHtmlContent();
innerContent.Append(wrappedMessage);
- innerContent.Append(unorderedList.ToHtmlContent(TagRenderMode.Normal));
+ innerContent.Append(unorderedList);
tagBuilder.InnerHtml = innerContent;
if (formContext != null && !excludePropertyErrors)
@@ -1015,6 +1016,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
}
var tagBuilder = new TagBuilder("input");
+ tagBuilder.TagRenderMode = TagRenderMode.SelfClosing;
tagBuilder.MergeAttributes(htmlAttributes);
tagBuilder.MergeAttribute("type", GetInputTypeString(inputType));
tagBuilder.MergeAttribute("name", fullName, replaceExisting: true);
@@ -1302,12 +1304,9 @@ namespace Microsoft.AspNet.Mvc.Rendering
foreach (var group in groupedSelectList)
{
var optGroup = group.First().Group;
-
- // Wrap if requested.
- TagBuilder groupBuilder = null;
if (optGroup != null)
{
- groupBuilder = new TagBuilder("optgroup");
+ var groupBuilder = new TagBuilder("optgroup");
if (optGroup.Name != null)
{
groupBuilder.MergeAttribute("label", optGroup.Name);
@@ -1318,17 +1317,21 @@ namespace Microsoft.AspNet.Mvc.Rendering
groupBuilder.MergeAttribute("disabled", "disabled");
}
- listItemBuilder.AppendLine(groupBuilder.ToHtmlContent(TagRenderMode.StartTag));
- }
+ var optGroupContent = new BufferedHtmlContent().Append(Environment.NewLine);
+ foreach (var item in group)
+ {
+ optGroupContent.AppendLine(GenerateOption(item));
+ }
- foreach (var item in group)
- {
- listItemBuilder.AppendLine(GenerateOption(item));
+ groupBuilder.InnerHtml = optGroupContent;
+ listItemBuilder.AppendLine(groupBuilder);
}
-
- if (optGroup != null)
+ else
{
- listItemBuilder.AppendLine(groupBuilder.ToHtmlContent(TagRenderMode.EndTag));
+ foreach (var item in group)
+ {
+ listItemBuilder.AppendLine(GenerateOption(item));
+ }
}
}
@@ -1338,7 +1341,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
private IHtmlContent GenerateOption(SelectListItem item)
{
var tagBuilder = GenerateOption(item, item.Text);
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/HtmlHelper.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/HtmlHelper.cs
index 98b7bbfced..90d3c8d661 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/HtmlHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/HtmlHelper.cs
@@ -214,7 +214,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
///
@@ -542,7 +542,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
///
@@ -643,11 +643,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- var elements = new BufferedHtmlContent();
- elements.Append(checkbox.ToHtmlContent(TagRenderMode.SelfClosing));
- elements.Append(hidden.ToHtmlContent(TagRenderMode.SelfClosing));
-
- return elements;
+ return new BufferedHtmlContent().Append(checkbox).Append(hidden);
}
protected virtual string GenerateDisplayName([NotNull] ModelExplorer modelExplorer, string expression)
@@ -690,7 +686,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateEditor(
@@ -751,7 +747,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
htmlAttributes);
if (tagBuilder != null)
{
- tagBuilder.ToHtmlContent(TagRenderMode.StartTag).WriteTo(ViewContext.Writer, _htmlEncoder);
+ tagBuilder.TagRenderMode = TagRenderMode.StartTag;
+ tagBuilder.WriteTo(ViewContext.Writer, _htmlEncoder);
}
return CreateForm();
@@ -793,7 +790,8 @@ namespace Microsoft.AspNet.Mvc.Rendering
htmlAttributes);
if (tagBuilder != null)
{
- tagBuilder.ToHtmlContent(TagRenderMode.StartTag).WriteTo(ViewContext.Writer, _htmlEncoder);
+ tagBuilder.TagRenderMode = TagRenderMode.StartTag;
+ tagBuilder.WriteTo(ViewContext.Writer, _htmlEncoder);
}
return CreateForm();
@@ -819,7 +817,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.SelfClosing);
+ return tagBuilder;
}
protected virtual string GenerateId(string expression)
@@ -847,7 +845,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected IHtmlContent GenerateListBox(
@@ -869,7 +867,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected virtual string GenerateName(string expression)
@@ -895,7 +893,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.SelfClosing);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateRadioButton(
@@ -917,7 +915,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.SelfClosing);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateTextArea(
@@ -939,7 +937,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateTextBox(
@@ -961,7 +959,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.SelfClosing);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateValidationMessage(
@@ -981,7 +979,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected virtual IHtmlContent GenerateValidationSummary(
@@ -1001,7 +999,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
return HtmlString.Empty;
}
- return tagBuilder.ToHtmlContent(TagRenderMode.Normal);
+ return tagBuilder;
}
protected virtual string GenerateValue(string expression, object value, string format, bool useViewData)
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/TagBuilder.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/TagBuilder.cs
index 08d86ae1f1..a177ee1881 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/TagBuilder.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/Rendering/Html/TagBuilder.cs
@@ -9,10 +9,11 @@ using System.Text;
using Microsoft.AspNet.Html.Abstractions;
using Microsoft.AspNet.Mvc.ViewFeatures;
using Microsoft.Framework.Internal;
+using Microsoft.Framework.WebEncoders;
namespace Microsoft.AspNet.Mvc.Rendering
{
- public class TagBuilder
+ public class TagBuilder : IHtmlContent
{
public TagBuilder(string tagName)
{
@@ -31,6 +32,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
public string TagName { get; private set; }
+ ///
+ /// The with which the tag is written.
+ ///
+ /// Defaults to .
+ public TagRenderMode TagRenderMode { get; set; } = TagRenderMode.Normal;
+
public void AddCssClass(string value)
{
string currentValue;
@@ -125,7 +132,7 @@ namespace Microsoft.AspNet.Mvc.Rendering
}
}
- private void AppendAttributes(BufferedHtmlContent content)
+ private void AppendAttributes(TextWriter writer, IHtmlEncoder encoder)
{
foreach (var attribute in Attributes)
{
@@ -136,11 +143,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
continue;
}
- content.Append(" ");
- content.Append(key);
- content.Append("=\"");
- content.Append(new StringHtmlContent(attribute.Value));
- content.Append("\"");
+ writer.Write(" ");
+ writer.Write(key);
+ writer.Write("=\"");
+ encoder.HtmlEncode(attribute.Value, writer);
+ writer.Write("\"");
}
}
@@ -185,48 +192,39 @@ namespace Microsoft.AspNet.Mvc.Rendering
InnerHtml = new StringHtmlContent(innerText);
}
- ///
- /// Converts the to with the specified
- /// .
- ///
- /// with which the
- /// should be written.
- /// containing the contents of the .
- public IHtmlContent ToHtmlContent(TagRenderMode renderMode)
+ ///
+ public void WriteTo(TextWriter writer, IHtmlEncoder encoder)
{
- var content = new BufferedHtmlContent();
- switch (renderMode)
+ switch (TagRenderMode)
{
case TagRenderMode.StartTag:
- content.Append("<");
- content.Append(TagName);
- AppendAttributes(content);
- content.Append(">");
+ writer.Write("<");
+ writer.Write(TagName);
+ AppendAttributes(writer, encoder);
+ writer.Write(">");
break;
case TagRenderMode.EndTag:
- content.Append("");
- content.Append(TagName);
- content.Append(">");
+ writer.Write("");
+ writer.Write(TagName);
+ writer.Write(">");
break;
case TagRenderMode.SelfClosing:
- content.Append("<");
- content.Append(TagName);
- AppendAttributes(content);
- content.Append(" />");
+ writer.Write("<");
+ writer.Write(TagName);
+ AppendAttributes(writer, encoder);
+ writer.Write(" />");
break;
default:
- content.Append("<");
- content.Append(TagName);
- AppendAttributes(content);
- content.Append(">");
- content.Append(InnerHtml);
- content.Append("");
- content.Append(TagName);
- content.Append(">");
+ writer.Write("<");
+ writer.Write(TagName);
+ AppendAttributes(writer, encoder);
+ writer.Write(">");
+ InnerHtml.WriteTo(writer, encoder);
+ writer.Write("");
+ writer.Write(TagName);
+ writer.Write(">");
break;
}
-
- return content;
}
private static class Html401IdUtil
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
index 27d15ffec7..b94e56553b 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/FormTagHelperTest.cs
@@ -9,8 +9,10 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Http.Internal;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Rendering;
+using Microsoft.AspNet.Mvc.TestCommon;
using Microsoft.AspNet.Razor.Runtime.TagHelpers;
using Microsoft.AspNet.Routing;
+using Microsoft.Framework.WebEncoders.Testing;
using Moq;
using Xunit;
@@ -57,7 +59,10 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
var viewContext = TestableHtmlGenerator.GetViewContext(model: null,
htmlGenerator: htmlGenerator,
metadataProvider: metadataProvider);
- var expectedPostContent = "Something" + htmlGenerator.GenerateAntiforgery(viewContext);
+ var expectedPostContent = "Something" +
+ HtmlContentUtilities.HtmlContentToString(
+ htmlGenerator.GenerateAntiforgery(viewContext),
+ new NullTestEncoder());
var formTagHelper = new FormTagHelper(htmlGenerator)
{
Action = "index",
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
index b5a3683e00..da060f0cfa 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/InputTagHelperTest.cs
@@ -282,6 +282,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
{
{ "class", "form-control" },
},
+ TagRenderMode = TagRenderMode.SelfClosing
};
htmlGenerator
.Setup(mock => mock.GenerateCheckBox(
@@ -297,7 +298,7 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
tagHelper.ViewContext,
tagHelper.For.ModelExplorer,
tagHelper.For.Name))
- .Returns(new TagBuilder("hidden"))
+ .Returns(new TagBuilder("hidden") { TagRenderMode = TagRenderMode.SelfClosing })
.Verifiable();
// Act
diff --git a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TestableHtmlGenerator.cs b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TestableHtmlGenerator.cs
index 1ab6d9efec..fd01d25fa4 100644
--- a/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TestableHtmlGenerator.cs
+++ b/test/Microsoft.AspNet.Mvc.TagHelpers.Test/TestableHtmlGenerator.cs
@@ -83,7 +83,8 @@ namespace Microsoft.AspNet.Mvc.TagHelpers
},
};
- return tagBuilder.ToHtmlContent(TagRenderMode.SelfClosing);
+ tagBuilder.TagRenderMode = TagRenderMode.SelfClosing;
+ return tagBuilder;
}
protected override IDictionary GetValidationAttributes(
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/Rendering/TagBuilderTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/Rendering/TagBuilderTest.cs
index 280af2849a..e81640fd14 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/Rendering/TagBuilderTest.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/Rendering/TagBuilderTest.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
+using System.IO;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.TestCommon;
using Microsoft.Framework.WebEncoders.Testing;
@@ -73,36 +74,22 @@ namespace Microsoft.AspNet.Mvc.Core.Rendering
[Theory]
[MemberData(nameof(RenderingTestingData))]
- public void ToString_IgnoresIdAttributeCase(TagRenderMode renderingMode, string expectedOutput)
+ public void WriteTo_IgnoresIdAttributeCase(TagRenderMode renderingMode, string expectedOutput)
{
// Arrange
var tagBuilder = new TagBuilder("p");
-
// An empty value id attribute should not be rendered via ToString.
tagBuilder.Attributes.Add("ID", string.Empty);
+ tagBuilder.TagRenderMode = renderingMode;
// Act
- var value = tagBuilder.ToHtmlContent(renderingMode);
+ using (var writer = new StringWriter())
+ {
+ tagBuilder.WriteTo(writer, new NullTestEncoder());
- // Assert
- Assert.Equal(expectedOutput, HtmlContentUtilities.HtmlContentToString(value, new NullTestEncoder()));
- }
-
- [Theory]
- [MemberData(nameof(RenderingTestingData))]
- public void ToHtmlString_IgnoresIdAttributeCase(TagRenderMode renderingMode, string expectedOutput)
- {
- // Arrange
- var tagBuilder = new TagBuilder("p");
-
- // An empty value id attribute should not be rendered via ToHtmlString.
- tagBuilder.Attributes.Add("ID", string.Empty);
-
- // Act
- var value = tagBuilder.ToHtmlContent(renderingMode);
-
- // Assert
- Assert.Equal(expectedOutput, HtmlContentUtilities.HtmlContentToString(value, new NullTestEncoder()));
+ // Assert
+ Assert.Equal(expectedOutput, writer.ToString());
+ }
}
[Fact]
diff --git a/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs b/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs
index 3b1dd1e58b..fa00933141 100644
--- a/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs
+++ b/test/WebSites/ActivatorWebSite/TagHelpers/HiddenTagHelper.cs
@@ -30,7 +30,7 @@ namespace ActivatorWebSite.TagHelpers
var content = await context.GetChildContentAsync();
- output.Content.SetContent(HtmlHelper.Hidden(Name, content).ToString());
+ output.Content.SetContent(HtmlHelper.Hidden(Name, content));
}
}
}
\ No newline at end of file
diff --git a/test/WebSites/ActivatorWebSite/TagHelpers/TitleTagHelper.cs b/test/WebSites/ActivatorWebSite/TagHelpers/TitleTagHelper.cs
index c7e1fbf96f..a3265c85dc 100644
--- a/test/WebSites/ActivatorWebSite/TagHelpers/TitleTagHelper.cs
+++ b/test/WebSites/ActivatorWebSite/TagHelpers/TitleTagHelper.cs
@@ -28,7 +28,7 @@ namespace ActivatorWebSite.TagHelpers
var builder = new TagBuilder("h2");
var title = ViewContext.ViewBag.Title;
builder.SetInnerText(title);
- output.PreContent.SetContent(builder.ToHtmlContent(TagRenderMode.Normal));
+ output.PreContent.SetContent(builder);
}
}
}
\ No newline at end of file