Avoid creating intermediate strings with THCWTW
This textwriter needs to inherit HtmlTextWriter and the StringCollectionTextWriter needs to have the right conditional test. This allows us to 'pass-through' any IHtmlContent instances without writing out intermediate strings.
This commit is contained in:
parent
f6a9bb1d13
commit
5810154826
|
|
@ -2,16 +2,17 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Microsoft.AspNet.Html.Abstractions;
|
||||||
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.AspNet.Razor.TagHelpers;
|
using Microsoft.AspNet.Razor.TagHelpers;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Razor
|
namespace Microsoft.AspNet.Mvc.Razor
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <see cref="TextWriter"/> implementation which writes to a <see cref="TagHelperContent"/> instance.
|
/// <see cref="HtmlTextWriter"/> implementation which writes to a <see cref="TagHelperContent"/> instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TagHelperContentWrapperTextWriter : TextWriter
|
public class TagHelperContentWrapperTextWriter : HtmlTextWriter
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="TagHelperContentWrapperTextWriter"/> class.
|
/// Initializes a new instance of the <see cref="TagHelperContentWrapperTextWriter"/> class.
|
||||||
|
|
@ -63,6 +64,12 @@ namespace Microsoft.AspNet.Mvc.Razor
|
||||||
Content.AppendHtml(value.ToString());
|
Content.AppendHtml(value.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Write(IHtmlContent value)
|
||||||
|
{
|
||||||
|
Content.Append(value);
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -176,17 +176,17 @@ namespace Microsoft.AspNet.Mvc.ViewFeatures
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the specified <paramref name="writer"/> is a <see cref="StringCollectionTextWriter"/> the contents
|
/// If the specified <paramref name="writer"/> is a <see cref="HtmlTextWriter"/> the contents
|
||||||
/// are copied. It is just written to the <paramref name="writer"/> otherwise.
|
/// are copied. It is just written to the <paramref name="writer"/> otherwise.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="writer">The <see cref="TextWriter"/> to which the content must be copied/written.</param>
|
/// <param name="writer">The <see cref="TextWriter"/> to which the content must be copied/written.</param>
|
||||||
/// <param name="encoder">The <see cref="HtmlEncoder"/> to encode the copied/written content.</param>
|
/// <param name="encoder">The <see cref="HtmlEncoder"/> to encode the copied/written content.</param>
|
||||||
public void CopyTo(TextWriter writer, HtmlEncoder encoder)
|
public void CopyTo(TextWriter writer, HtmlEncoder encoder)
|
||||||
{
|
{
|
||||||
var targetStringCollectionWriter = writer as StringCollectionTextWriter;
|
var htmlTextWriter = writer as HtmlTextWriter;
|
||||||
if (targetStringCollectionWriter != null)
|
if (htmlTextWriter != null)
|
||||||
{
|
{
|
||||||
targetStringCollectionWriter._content.Append(Content);
|
htmlTextWriter.Write(Content);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -195,7 +195,7 @@ namespace Microsoft.AspNet.Mvc.ViewFeatures
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the specified <paramref name="writer"/> is a <see cref="StringCollectionTextWriter"/> the contents
|
/// If the specified <paramref name="writer"/> is a <see cref="HtmlTextWriter"/> the contents
|
||||||
/// are copied. It is just written to the <paramref name="writer"/> otherwise.
|
/// are copied. It is just written to the <paramref name="writer"/> otherwise.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="writer">The <see cref="TextWriter"/> to which the content must be copied/written.</param>
|
/// <param name="writer">The <see cref="TextWriter"/> to which the content must be copied/written.</param>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue