diff --git a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs
index af6f9c3677..c745b36943 100644
--- a/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs
+++ b/src/Microsoft.AspNet.Mvc.Razor/RazorPage.cs
@@ -4,7 +4,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using System.Globalization;
using System.IO;
using System.Linq;
using System.Security.Claims;
@@ -379,7 +378,7 @@ namespace Microsoft.AspNet.Mvc.Razor
}
else
{
- // This special case alows us to keep buffering as IHtmlContent until we get to the 'final'
+ // This special case allows us to keep buffering as IHtmlContent until we get to the 'final'
// TextWriter.
htmlTextWriter.Write(htmlContent);
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ContentViewComponentResult.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ContentViewComponentResult.cs
index f2880a5111..2d7dca989e 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ContentViewComponentResult.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ContentViewComponentResult.cs
@@ -2,9 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
-using System.Net;
using System.Threading.Tasks;
-using Microsoft.AspNet.Mvc.Rendering;
+using Microsoft.AspNet.Mvc.Internal;
namespace Microsoft.AspNet.Mvc.ViewComponents
{
@@ -12,20 +11,15 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
/// An which writes text when executed.
///
///
- /// always writes HTML encoded text from the
- /// property.
- ///
- /// When using , the provided content will be HTML
- /// encoded and stored in .
- ///
- /// To write pre-encoded conent, use .
+ /// The provided content will be HTML-encoded when written. To write pre-encoded content, use an
+ /// .
///
public class ContentViewComponentResult : IViewComponentResult
{
///
/// Initializes a new .
///
- /// Content to write. The content be HTML encoded when output.
+ /// Content to write. The content will be HTML encoded when written.
public ContentViewComponentResult(string content)
{
if (content == null)
@@ -34,25 +28,6 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
}
Content = content;
- EncodedContent = new HtmlString(WebUtility.HtmlEncode(content));
- }
-
- ///
- /// Initializes a new .
- ///
- ///
- /// Content to write. The content is treated as already HTML encoded, and no further encoding
- /// will be performed.
- ///
- public ContentViewComponentResult(HtmlString encodedContent)
- {
- if (encodedContent == null)
- {
- throw new ArgumentNullException(nameof(encodedContent));
- }
-
- EncodedContent = encodedContent;
- Content = WebUtility.HtmlDecode(encodedContent.ToString());
}
///
@@ -61,12 +36,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
public string Content { get; }
///
- /// Gets the encoded content.
- ///
- public HtmlString EncodedContent { get; }
-
- ///
- /// Writes the .
+ /// Encodes and writes the .
///
/// The .
public void Execute(ViewComponentContext context)
@@ -76,22 +46,19 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
throw new ArgumentNullException(nameof(context));
}
- context.Writer.Write(EncodedContent.ToString());
+ context.HtmlEncoder.Encode(context.Writer, Content);
}
///
- /// Writes the .
+ /// Encodes and writes the .
///
/// The .
/// A completed .
public Task ExecuteAsync(ViewComponentContext context)
{
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
+ Execute(context);
- return context.Writer.WriteAsync(EncodedContent.ToString());
+ return TaskCache.CompletedTask;
}
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs
index a17439ab04..d367bb4e0f 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentHelper.cs
@@ -3,6 +3,7 @@
using System;
using System.IO;
+using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNet.Html.Abstractions;
using Microsoft.AspNet.Mvc.Rendering;
@@ -14,12 +15,14 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
public class DefaultViewComponentHelper : IViewComponentHelper, ICanHasViewContext
{
private readonly IViewComponentDescriptorCollectionProvider _descriptorProvider;
+ private readonly HtmlEncoder _htmlEncoder;
private readonly IViewComponentInvokerFactory _invokerFactory;
private readonly IViewComponentSelector _selector;
private ViewContext _viewContext;
public DefaultViewComponentHelper(
IViewComponentDescriptorCollectionProvider descriptorProvider,
+ HtmlEncoder htmlEncoder,
IViewComponentSelector selector,
IViewComponentInvokerFactory invokerFactory)
{
@@ -28,6 +31,11 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
throw new ArgumentNullException(nameof(descriptorProvider));
}
+ if (htmlEncoder == null)
+ {
+ throw new ArgumentNullException(nameof(htmlEncoder));
+ }
+
if (selector == null)
{
throw new ArgumentNullException(nameof(selector));
@@ -39,6 +47,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
}
_descriptorProvider = descriptorProvider;
+ _htmlEncoder = htmlEncoder;
_selector = selector;
_invokerFactory = invokerFactory;
}
@@ -202,7 +211,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
throw new ArgumentNullException(nameof(descriptor));
}
- var context = new ViewComponentContext(descriptor, arguments, _viewContext, writer);
+ var context = new ViewComponentContext(descriptor, arguments, _htmlEncoder, _viewContext, writer);
var invoker = _invokerFactory.CreateInstance(context);
if (invoker == null)
@@ -229,7 +238,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
throw new ArgumentNullException(nameof(descriptor));
}
- var context = new ViewComponentContext(descriptor, arguments, _viewContext, writer);
+ var context = new ViewComponentContext(descriptor, arguments, _htmlEncoder, _viewContext, writer);
var invoker = _invokerFactory.CreateInstance(context);
if (invoker == null)
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentInvoker.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentInvoker.cs
index e2c7aae80e..49bbf28101 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentInvoker.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/DefaultViewComponentInvoker.cs
@@ -6,10 +6,10 @@ using System.Diagnostics;
using System.Reflection;
using System.Runtime.ExceptionServices;
using System.Threading.Tasks;
+using Microsoft.AspNet.Html.Abstractions;
using Microsoft.AspNet.Mvc.Controllers;
using Microsoft.AspNet.Mvc.Diagnostics;
using Microsoft.AspNet.Mvc.Infrastructure;
-using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.ViewFeatures;
using Microsoft.AspNet.Mvc.ViewFeatures.Logging;
using Microsoft.Extensions.Logging;
@@ -175,8 +175,6 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
var component = CreateComponent(context);
- object result = null;
-
using (_logger.ViewComponentScope(context))
{
_diagnosticSource.BeforeViewComponent(context, component);
@@ -185,7 +183,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
try
{
var startTime = Environment.TickCount;
- result = method.Invoke(component, context.Arguments);
+ var result = method.Invoke(component, context.Arguments);
var viewComponentResult = CoerceToViewComponentResult(result);
_logger.ViewComponentExecuted(context, startTime, viewComponentResult);
@@ -222,15 +220,15 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
return new ContentViewComponentResult(stringResult);
}
- var htmlStringResult = value as HtmlString;
- if (htmlStringResult != null)
+ var htmlContent = value as IHtmlContent;
+ if (htmlContent != null)
{
- return new ContentViewComponentResult(htmlStringResult);
+ return new HtmlContentViewComponentResult(htmlContent);
}
throw new InvalidOperationException(Resources.FormatViewComponent_InvalidReturnValue(
typeof(string).Name,
- typeof(HtmlString).Name,
+ typeof(IHtmlContent).Name,
typeof(IViewComponentResult).Name));
}
}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/HtmlContentViewComponentResult.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/HtmlContentViewComponentResult.cs
new file mode 100644
index 0000000000..0f7af8164a
--- /dev/null
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/HtmlContentViewComponentResult.cs
@@ -0,0 +1,72 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System;
+using System.Threading.Tasks;
+using Microsoft.AspNet.Html.Abstractions;
+using Microsoft.AspNet.Mvc.Internal;
+
+namespace Microsoft.AspNet.Mvc.ViewComponents
+{
+ ///
+ /// An which writes an when executed.
+ ///
+ ///
+ /// The provided content will be HTML-encoded as specified when the content was created. To encoded and write
+ /// text, use a .
+ ///
+ public class HtmlContentViewComponentResult : IViewComponentResult
+ {
+ ///
+ /// Initializes a new .
+ ///
+ public HtmlContentViewComponentResult(IHtmlContent encodedContent)
+ {
+ if (encodedContent == null)
+ {
+ throw new ArgumentNullException(nameof(encodedContent));
+ }
+
+ EncodedContent = encodedContent;
+ }
+
+ ///
+ /// Gets the encoded content.
+ ///
+ public IHtmlContent EncodedContent { get; }
+
+ ///
+ /// Writes the .
+ ///
+ /// The .
+ public void Execute(ViewComponentContext context)
+ {
+ if (context == null)
+ {
+ throw new ArgumentNullException(nameof(context));
+ }
+
+ var htmlWriter = context.Writer as HtmlTextWriter;
+ if (htmlWriter == null)
+ {
+ EncodedContent.WriteTo(context.Writer, context.HtmlEncoder);
+ }
+ else
+ {
+ htmlWriter.Write(EncodedContent);
+ }
+ }
+
+ ///
+ /// Writes the .
+ ///
+ /// The .
+ /// A completed .
+ public Task ExecuteAsync(ViewComponentContext context)
+ {
+ Execute(context);
+
+ return TaskCache.CompletedTask;
+ }
+ }
+}
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ViewComponentContext.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ViewComponentContext.cs
index 4029fd929e..699fecaf89 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ViewComponentContext.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewComponents/ViewComponentContext.cs
@@ -3,6 +3,7 @@
using System;
using System.IO;
+using System.Text.Encodings.Web;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.ViewFeatures;
@@ -38,6 +39,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
public ViewComponentContext(
ViewComponentDescriptor viewComponentDescriptor,
object[] arguments,
+ HtmlEncoder htmlEncoder,
ViewContext viewContext,
TextWriter writer)
{
@@ -51,6 +53,11 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
throw new ArgumentNullException(nameof(arguments));
}
+ if (htmlEncoder == null)
+ {
+ throw new ArgumentNullException(nameof(htmlEncoder));
+ }
+
if (viewContext == null)
{
throw new ArgumentNullException(nameof(viewContext));
@@ -63,6 +70,7 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
ViewComponentDescriptor = viewComponentDescriptor;
Arguments = arguments;
+ HtmlEncoder = htmlEncoder;
// We want to create a defensive copy of the VDD here so that changes done in the VC
// aren't visible in the calling view.
@@ -74,13 +82,21 @@ namespace Microsoft.AspNet.Mvc.ViewComponents
}
///
- /// Gets or sets the View Component arguments.
+ /// Gets or sets the View Component arguments.
///
///
/// The property setter is provided for unit test purposes only.
///
public object[] Arguments { get; set; }
+ ///
+ /// Gets or sets the .
+ ///
+ ///
+ /// The property setter is provided for unit test purposes only.
+ ///
+ public HtmlEncoder HtmlEncoder { get; set; }
+
///
/// Gets or sets the for the View Component being invoked.
///
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultEditorTemplates.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultEditorTemplates.cs
index ece0d2524f..0bf43fca6c 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultEditorTemplates.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultEditorTemplates.cs
@@ -12,7 +12,6 @@ using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.ViewEngines;
using Microsoft.AspNet.Mvc.ViewFeatures.Internal;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Internal;
namespace Microsoft.AspNet.Mvc.ViewFeatures
{
diff --git a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultHtmlGenerator.cs b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultHtmlGenerator.cs
index 9f1e9e9f36..fba7470525 100644
--- a/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultHtmlGenerator.cs
+++ b/src/Microsoft.AspNet.Mvc.ViewFeatures/ViewFeatures/DefaultHtmlGenerator.cs
@@ -15,7 +15,6 @@ using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Mvc.ViewFeatures.Internal;
-using Microsoft.Extensions.Internal;
using Microsoft.Extensions.OptionsModel;
namespace Microsoft.AspNet.Mvc.ViewFeatures
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentResultTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentResultTest.cs
index 6ee708a612..dd02c9c8e2 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentResultTest.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentResultTest.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
+using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Internal;
@@ -20,6 +21,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.OptionsModel;
+using Microsoft.Extensions.WebEncoders.Testing;
using Microsoft.Net.Http.Headers;
using Xunit;
@@ -480,6 +482,7 @@ namespace Microsoft.AspNet.Mvc
services.AddSingleton(NullLoggerFactory.Instance);
services.AddSingleton(new TempDataDictionary(httpContext, tempDataProvider));
services.AddTransient();
+ services.AddSingleton();
return services;
}
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentTests.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentTests.cs
index 561bce7dd1..a791979502 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentTests.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponentTests.cs
@@ -65,7 +65,6 @@ namespace Microsoft.AspNet.Mvc
// Assert
Assert.IsType(actualResult);
Assert.Same(expectedContent, actualResult.Content);
- Assert.Equal(expectedEncodedContent.ToString(), actualResult.EncodedContent.ToString());
}
[Fact]
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ContentViewComponentResultTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ContentViewComponentResultTest.cs
index c6ed6613f8..ee447c033d 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ContentViewComponentResultTest.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ContentViewComponentResultTest.cs
@@ -11,6 +11,7 @@ using Microsoft.AspNet.Mvc.ViewComponents;
using Microsoft.AspNet.Mvc.ViewEngines;
using Microsoft.AspNet.Mvc.ViewFeatures;
using Microsoft.AspNet.Routing;
+using Microsoft.Extensions.WebEncoders.Testing;
using Moq;
using Xunit;
@@ -32,26 +33,7 @@ namespace Microsoft.AspNet.Mvc
buffer.Position = 0;
// Assert
- Assert.Equal("<Test />", result.EncodedContent.ToString());
- Assert.Equal("<Test />", new StreamReader(buffer).ReadToEnd());
- }
-
- [Fact]
- public void Execute_WritesData_PreEncoded()
- {
- // Arrange
- var buffer = new MemoryStream();
- var viewComponentContext = GetViewComponentContext(Mock.Of(), buffer);
-
- var result = new ContentViewComponentResult(new HtmlString(""));
-
- // Act
- result.Execute(viewComponentContext);
- buffer.Position = 0;
-
- // Assert
- Assert.Equal("", result.Content);
- Assert.Equal("", new StreamReader(buffer).ReadToEnd());
+ Assert.Equal("HtmlEncode[[]]", new StreamReader(buffer).ReadToEnd());
}
private static ViewComponentContext GetViewComponentContext(IView view, Stream stream)
@@ -61,7 +43,7 @@ namespace Microsoft.AspNet.Mvc
var viewContext = new ViewContext(
actionContext,
view,
- viewData,
+ viewData,
new TempDataDictionary(new HttpContextAccessor(), new SessionStateTempDataProvider()),
TextWriter.Null,
new HtmlHelperOptions());
@@ -73,7 +55,13 @@ namespace Microsoft.AspNet.Mvc
Type = typeof(object),
};
- var viewComponentContext = new ViewComponentContext(viewComponentDescriptor, new object[0], viewContext, writer);
+ var viewComponentContext = new ViewComponentContext(
+ viewComponentDescriptor,
+ new object[0],
+ new HtmlTestEncoder(),
+ viewContext,
+ writer);
+
return viewComponentContext;
}
}
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/HtmlContentViewComponentResultTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/HtmlContentViewComponentResultTest.cs
new file mode 100644
index 0000000000..e57a55d89b
--- /dev/null
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/HtmlContentViewComponentResultTest.cs
@@ -0,0 +1,69 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+#if MOCK_SUPPORT
+using System.IO;
+using Microsoft.AspNet.Http.Internal;
+using Microsoft.AspNet.Mvc.Abstractions;
+using Microsoft.AspNet.Mvc.ModelBinding;
+using Microsoft.AspNet.Mvc.Rendering;
+using Microsoft.AspNet.Mvc.ViewComponents;
+using Microsoft.AspNet.Mvc.ViewEngines;
+using Microsoft.AspNet.Mvc.ViewFeatures;
+using Microsoft.AspNet.Routing;
+using Microsoft.Extensions.WebEncoders.Testing;
+using Moq;
+using Xunit;
+
+namespace Microsoft.AspNet.Mvc
+{
+ public class HtmlContentViewComponentResultTest
+ {
+ [Fact]
+ public void Execute_WritesData_PreEncoded()
+ {
+ // Arrange
+ var buffer = new MemoryStream();
+ var viewComponentContext = GetViewComponentContext(Mock.Of(), buffer);
+
+ var result = new HtmlContentViewComponentResult(new HtmlString(""));
+
+ // Act
+ result.Execute(viewComponentContext);
+ buffer.Position = 0;
+
+ // Assert
+ Assert.Equal("", new StreamReader(buffer).ReadToEnd());
+ }
+
+ private static ViewComponentContext GetViewComponentContext(IView view, Stream stream)
+ {
+ var actionContext = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
+ var viewData = new ViewDataDictionary(new EmptyModelMetadataProvider());
+ var viewContext = new ViewContext(
+ actionContext,
+ view,
+ viewData,
+ new TempDataDictionary(new HttpContextAccessor(), new SessionStateTempDataProvider()),
+ TextWriter.Null,
+ new HtmlHelperOptions());
+
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+
+ var viewComponentDescriptor = new ViewComponentDescriptor()
+ {
+ Type = typeof(object),
+ };
+
+ var viewComponentContext = new ViewComponentContext(
+ viewComponentDescriptor,
+ new object[0],
+ new HtmlTestEncoder(),
+ viewContext,
+ writer);
+
+ return viewComponentContext;
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/JsonViewComponentResultTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/JsonViewComponentResultTest.cs
index 9ac6436613..904cc757cd 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/JsonViewComponentResultTest.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/JsonViewComponentResultTest.cs
@@ -15,6 +15,7 @@ using Microsoft.AspNet.Mvc.ViewEngines;
using Microsoft.AspNet.Mvc.ViewFeatures;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.WebEncoders.Testing;
using Moq;
using Newtonsoft.Json;
using Xunit;
@@ -83,7 +84,13 @@ namespace Microsoft.AspNet.Mvc
Type = typeof(object),
};
- var viewComponentContext = new ViewComponentContext(viewComponentDescriptor, new object[0], viewContext, writer);
+ var viewComponentContext = new ViewComponentContext(
+ viewComponentDescriptor,
+ new object[0],
+ new HtmlTestEncoder(),
+ viewContext,
+ writer);
+
return viewComponentContext;
}
diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ViewViewComponentResultTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ViewViewComponentResultTest.cs
index 8856cbb5a1..2ca3123db3 100644
--- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ViewViewComponentResultTest.cs
+++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/ViewComponents/ViewViewComponentResultTest.cs
@@ -16,6 +16,7 @@ using Microsoft.AspNet.Mvc.ViewEngines;
using Microsoft.AspNet.Mvc.ViewFeatures;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.WebEncoders.Testing;
using Moq;
using Xunit;
@@ -540,6 +541,7 @@ namespace Microsoft.AspNet.Mvc
var viewComponentContext = new ViewComponentContext(
viewComponentDescriptor,
new object[0],
+ new HtmlTestEncoder(),
viewContext,
TextWriter.Null);
diff --git a/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs b/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs
index 6b922a9dcd..792b4efe26 100644
--- a/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs
+++ b/test/WebSites/TagHelpersWebSite/TagHelpers/TagCloudViewComponentTagHelper.cs
@@ -4,6 +4,7 @@
using System;
using System.IO;
using System.Linq;
+using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.Rendering;
@@ -24,6 +25,12 @@ namespace MvcSample.Web.Components
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum")
.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.ToArray();
+ private readonly HtmlEncoder _htmlEncoder;
+
+ public TagCloudViewComponentTagHelper(HtmlEncoder htmlEncoder)
+ {
+ _htmlEncoder = htmlEncoder;
+ }
public int Count { get; set; }
@@ -52,6 +59,7 @@ namespace MvcSample.Web.Components
await result.ExecuteAsync(new ViewComponentContext(
viewComponentDescriptor,
new object[0],
+ _htmlEncoder,
ViewContext,
writer));