From ab4cd5c4c42d8b33c32f9b12d979c0776dccae6f Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Sat, 9 May 2015 10:29:56 +0000 Subject: [PATCH] Add JsonHelper for serializing JSON in views - remove NotNull from JsonHelper Serialize --- .../Rendering/IJsonHelper.cs | 29 ++++++++++ .../Rendering/JsonHelper.cs | 53 +++++++++++++++++ .../MvcRazorHost.cs | 1 + .../MvcServiceCollectionExtensions.cs | 1 + .../BasicTests.cs | 57 +++++++++++++++++++ .../MvcRazorHostTest.cs | 8 +-- .../TestFiles/Output/DesignTime/Basic.cs | 2 + .../TestFiles/Output/DesignTime/Inject.cs | 2 + .../Output/DesignTime/InjectWithModel.cs | 2 + .../Output/DesignTime/InjectWithSemicolon.cs | 2 + .../TestFiles/Output/DesignTime/Model.cs | 2 + .../DesignTime/ModelExpressionTagHelper.cs | 2 + .../TestFiles/Output/Runtime/Basic.cs | 2 + .../TestFiles/Output/Runtime/Inject.cs | 2 + .../Output/Runtime/InjectWithModel.cs | 2 + .../Output/Runtime/InjectWithSemicolon.cs | 2 + .../TestFiles/Output/Runtime/Model.cs | 2 + .../Runtime/ModelExpressionTagHelper.cs | 2 + .../Controllers/HomeController.cs | 23 ++++++++ .../Views/Home/JsonHelperInView.cshtml | 3 + .../Home/JsonHelperWithSettingsInView.cshtml | 5 ++ 21 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 src/Microsoft.AspNet.Mvc.Core/Rendering/IJsonHelper.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Rendering/JsonHelper.cs create mode 100644 test/WebSites/BasicWebSite/Views/Home/JsonHelperInView.cshtml create mode 100644 test/WebSites/BasicWebSite/Views/Home/JsonHelperWithSettingsInView.cshtml diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/IJsonHelper.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/IJsonHelper.cs new file mode 100644 index 0000000000..e9a3203806 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/IJsonHelper.cs @@ -0,0 +1,29 @@ +// 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 Microsoft.Framework.Internal; +using Newtonsoft.Json; + +namespace Microsoft.AspNet.Mvc.Rendering +{ + /// + /// Base JSON helpers. + /// + public interface IJsonHelper + { + /// + /// Returns serialized JSON for the . + /// + /// The value to serialize as JSON. + /// A new containing the serialized JSON. + HtmlString Serialize(object value); + + /// + /// Returns serialized JSON for the . + /// + /// The value to serialize as JSON. + /// The to be used by the serializer. + /// A new containing the serialized JSON. + HtmlString Serialize(object value, [NotNull] JsonSerializerSettings serializerSettings); + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/JsonHelper.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/JsonHelper.cs new file mode 100644 index 0000000000..789b4783c8 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/JsonHelper.cs @@ -0,0 +1,53 @@ +// 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.Globalization; +using System.IO; +using Newtonsoft.Json; +using Microsoft.Framework.Internal; + +namespace Microsoft.AspNet.Mvc.Rendering +{ + /// + /// Default implementation of . + /// + public class JsonHelper : IJsonHelper + { + private readonly JsonOutputFormatter _jsonOutputFormatter; + + /// + /// Initializes a new instance of that is backed by . + /// + /// The used to serialize JSON. + public JsonHelper([NotNull] JsonOutputFormatter jsonOutputFormatter) + { + _jsonOutputFormatter = jsonOutputFormatter; + } + + /// + public HtmlString Serialize(object value) + { + return SerializeInternal(_jsonOutputFormatter, value); + } + + /// + public HtmlString Serialize(object value, [NotNull] JsonSerializerSettings serializerSettings) + { + var jsonOutputFormatter = new JsonOutputFormatter + { + SerializerSettings = serializerSettings + }; + + return SerializeInternal(jsonOutputFormatter, value); + } + + private HtmlString SerializeInternal(JsonOutputFormatter jsonOutputFormatter, object value) + { + var stringWriter = new StringWriter(CultureInfo.InvariantCulture); + jsonOutputFormatter.WriteObject(stringWriter, value); + + return new HtmlString(stringWriter.ToString()); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs b/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs index 149a93bdb8..7442a7a239 100644 --- a/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs +++ b/src/Microsoft.AspNet.Mvc.Razor.Host/MvcRazorHost.cs @@ -33,6 +33,7 @@ namespace Microsoft.AspNet.Mvc.Razor private static readonly Chunk[] _defaultInheritedChunks = new[] { new InjectChunk("Microsoft.AspNet.Mvc.Rendering.IHtmlHelper", HtmlHelperPropertyName), + new InjectChunk("Microsoft.AspNet.Mvc.Rendering.IJsonHelper", "Json"), new InjectChunk("Microsoft.AspNet.Mvc.IViewComponentHelper", "Component"), new InjectChunk("Microsoft.AspNet.Mvc.IUrlHelper", "Url"), }; diff --git a/src/Microsoft.AspNet.Mvc/MvcServiceCollectionExtensions.cs b/src/Microsoft.AspNet.Mvc/MvcServiceCollectionExtensions.cs index 17c9c4e6b3..0091994a11 100644 --- a/src/Microsoft.AspNet.Mvc/MvcServiceCollectionExtensions.cs +++ b/src/Microsoft.AspNet.Mvc/MvcServiceCollectionExtensions.cs @@ -144,6 +144,7 @@ namespace Microsoft.Framework.DependencyInjection // View and rendering helpers services.TryAdd(ServiceDescriptor.Transient()); services.TryAdd(ServiceDescriptor.Transient(typeof(IHtmlHelper<>), typeof(HtmlHelper<>))); + services.TryAdd(ServiceDescriptor.Transient()); services.TryAdd(ServiceDescriptor.Scoped()); // Only want one ITagHelperActivator so it can cache Type activation information. Types won't conflict. diff --git a/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs b/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs index 0ab3fc9552..2e6aa48800 100644 --- a/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs +++ b/test/Microsoft.AspNet.Mvc.FunctionalTests/BasicTests.cs @@ -12,6 +12,7 @@ using BasicWebSite; using Microsoft.AspNet.Builder; using Microsoft.Framework.DependencyInjection; using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; using Xunit; namespace Microsoft.AspNet.Mvc.FunctionalTests @@ -209,6 +210,62 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests Assert.Equal(expectedBody, actualBody); } + [Fact] + public async Task JsonHelper_RendersJson() + { + // Arrange + var server = TestHelper.CreateServer(_app, SiteName, _configureServices); + var client = new HttpClient(server.CreateHandler(), false); + + var json = JsonConvert.SerializeObject(new BasicWebSite.Models.Person() + { + Id = 9000, + Name = "John Smith" + }); + + var expectedBody = string.Format(@"", json); + + // Act + var response = await client.GetAsync("https://localhost/Home/JsonHelperInView"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("text/html", response.Content.Headers.ContentType.MediaType); + + var actualBody = await response.Content.ReadAsStringAsync(); + Assert.Equal(expectedBody, actualBody); + } + + [Fact] + public async Task JsonHelperWithSettings_RendersJson() + { + // Arrange + var server = TestHelper.CreateServer(_app, SiteName, _configureServices); + var client = new HttpClient(server.CreateHandler(), false); + + var json = JsonConvert.SerializeObject(new BasicWebSite.Models.Person() + { + Id = 9000, + Name = "John Smith" + }, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); + + var expectedBody = string.Format(@"", json); + + // Act + var response = await client.GetAsync("https://localhost/Home/JsonHelperWithSettingsInView"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("text/html", response.Content.Headers.ContentType.MediaType); + + var actualBody = await response.Content.ReadAsStringAsync(); + Assert.Equal(expectedBody, actualBody); + } + public static IEnumerable HtmlHelperLinkGenerationData { get diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs index 35eb685625..e11079f6be 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/MvcRazorHostTest.cs @@ -121,16 +121,16 @@ namespace Microsoft.AspNet.Mvc.Razor BuildLineMapping(documentAbsoluteIndex: 139, documentLineIndex: 4, documentCharacterIndex: 17, - generatedAbsoluteIndex: 2105, - generatedLineIndex: 53, + generatedAbsoluteIndex: 2241, + generatedLineIndex: 55, generatedCharacterIndex: 95, contentLength: 3), BuildLineMapping( documentAbsoluteIndex: 166, documentLineIndex: 5, documentCharacterIndex: 18, - generatedAbsoluteIndex: 2418, - generatedLineIndex: 59, + generatedAbsoluteIndex: 2554, + generatedLineIndex: 61, generatedCharacterIndex: 87, contentLength: 5), }; diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Basic.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Basic.cs index 74593b407b..070eb3992c 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Basic.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Basic.cs @@ -17,6 +17,8 @@ [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Inject.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Inject.cs index 4fa67c591d..54ae21c152 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Inject.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Inject.cs @@ -32,6 +32,8 @@ using MyNamespace [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithModel.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithModel.cs index cf7d144d48..10db4f18be 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithModel.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithModel.cs @@ -38,6 +38,8 @@ #line hidden { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithSemicolon.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithSemicolon.cs index 76df5b3879..759c82bf27 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithSemicolon.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/InjectWithSemicolon.cs @@ -54,6 +54,8 @@ #line hidden { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Model.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Model.cs index 9bba58b51b..1034dc18dc 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Model.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/Model.cs @@ -24,6 +24,8 @@ [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/ModelExpressionTagHelper.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/ModelExpressionTagHelper.cs index 2aaeef120b..ac95153271 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/ModelExpressionTagHelper.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/DesignTime/ModelExpressionTagHelper.cs @@ -40,6 +40,8 @@ [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Basic.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Basic.cs index 99120136ef..c31cfc6229 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Basic.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Basic.cs @@ -18,6 +18,8 @@ namespace Asp [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Inject.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Inject.cs index 7ee1da2970..01901af28f 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Inject.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Inject.cs @@ -26,6 +26,8 @@ using MyNamespace [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithModel.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithModel.cs index 71e268b817..fe884ef9f5 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithModel.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithModel.cs @@ -26,6 +26,8 @@ namespace Asp [Microsoft.AspNet.Mvc.ActivateAttribute] public MyService Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithSemicolon.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithSemicolon.cs index 651cc1140f..d54993ea51 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithSemicolon.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/InjectWithSemicolon.cs @@ -30,6 +30,8 @@ namespace Asp [Microsoft.AspNet.Mvc.ActivateAttribute] public MyService Html2 { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Model.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Model.cs index a49b51ab72..132804c592 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Model.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/Model.cs @@ -24,6 +24,8 @@ namespace Asp [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs index 50c7bd4b8b..89bc3e0c30 100644 --- a/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs +++ b/test/Microsoft.AspNet.Mvc.Razor.Host.Test/TestFiles/Output/Runtime/ModelExpressionTagHelper.cs @@ -33,6 +33,8 @@ namespace Asp [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.Rendering.IHtmlHelper Html { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] + public Microsoft.AspNet.Mvc.Rendering.IJsonHelper Json { get; private set; } + [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IViewComponentHelper Component { get; private set; } [Microsoft.AspNet.Mvc.ActivateAttribute] public Microsoft.AspNet.Mvc.IUrlHelper Url { get; private set; } diff --git a/test/WebSites/BasicWebSite/Controllers/HomeController.cs b/test/WebSites/BasicWebSite/Controllers/HomeController.cs index 5124769122..71760d1a5c 100644 --- a/test/WebSites/BasicWebSite/Controllers/HomeController.cs +++ b/test/WebSites/BasicWebSite/Controllers/HomeController.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.Threading.Tasks; +using BasicWebSite.Models; using Microsoft.AspNet.Mvc; using Microsoft.AspNet.WebUtilities; @@ -54,6 +55,28 @@ namespace BasicWebSite.Controllers return Task.FromResult(true); } + public IActionResult JsonHelperInView() + { + Person person = new Person + { + Id = 9000, + Name = "John Smith" + }; + + return View(person); + } + + public IActionResult JsonHelperWithSettingsInView() + { + Person person = new Person + { + Id = 9000, + Name = "John Smith" + }; + + return View(person); + } + public IActionResult JsonTextInView() { return View(); diff --git a/test/WebSites/BasicWebSite/Views/Home/JsonHelperInView.cshtml b/test/WebSites/BasicWebSite/Views/Home/JsonHelperInView.cshtml new file mode 100644 index 0000000000..df3ca5aea1 --- /dev/null +++ b/test/WebSites/BasicWebSite/Views/Home/JsonHelperInView.cshtml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/test/WebSites/BasicWebSite/Views/Home/JsonHelperWithSettingsInView.cshtml b/test/WebSites/BasicWebSite/Views/Home/JsonHelperWithSettingsInView.cshtml new file mode 100644 index 0000000000..99e30567f5 --- /dev/null +++ b/test/WebSites/BasicWebSite/Views/Home/JsonHelperWithSettingsInView.cshtml @@ -0,0 +1,5 @@ +@using Newtonsoft.Json +@using Newtonsoft.Json.Serialization + \ No newline at end of file