diff --git a/src/Microsoft.AspNet.Mvc.Core/TemplateInfo.cs b/src/Microsoft.AspNet.Mvc.Core/TemplateInfo.cs index 842fb1f078..9a1f3335d2 100644 --- a/src/Microsoft.AspNet.Mvc.Core/TemplateInfo.cs +++ b/src/Microsoft.AspNet.Mvc.Core/TemplateInfo.cs @@ -29,12 +29,27 @@ namespace Microsoft.AspNet.Mvc _visitedObjects = new HashSet(original._visitedObjects); } + /// + /// Gets or sets the formatted model value. + /// + /// + /// Will never return null to avoid problems when using HTML helpers within a template. Otherwise the + /// helpers could find elements in the `ViewDataDictionary`, not the intended Model properties. + /// + /// The formatted model value. public object FormattedModelValue { get { return _formattedModelValue; } set { _formattedModelValue = value ?? string.Empty; } } + /// + /// Gets or sets the HTML field prefix. + /// + /// + /// Will never return null for consistency with . + /// + /// The HTML field prefix. public string HtmlFieldPrefix { get { return _htmlFieldPrefix; } diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultDisplayTemplatesTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultDisplayTemplatesTests.cs index 564ceef5b9..f4dc5ceb47 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultDisplayTemplatesTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultDisplayTemplatesTests.cs @@ -9,7 +9,7 @@ using Microsoft.AspNet.Mvc.Rendering; using Moq; using Xunit; -namespace Microsoft.AspNet.Mvc.Core.Test +namespace Microsoft.AspNet.Mvc.Core { public class DefaultDisplayTemplateTests { diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs index c019917710..52b5cb6cc7 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/DefaultEditorTemplatesTests.cs @@ -9,7 +9,7 @@ using Microsoft.AspNet.Mvc.Rendering; using Moq; using Xunit; -namespace Microsoft.AspNet.Mvc.Core.Test +namespace Microsoft.AspNet.Mvc.Core { public class DefaultEditorTemplatesTests { diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/ViewDataOfTTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/ViewDataOfTTest.cs index 4fd7383908..9d2d70a07d 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/ViewDataOfTTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Rendering/ViewDataOfTTest.cs @@ -5,7 +5,7 @@ using System; using Microsoft.AspNet.Mvc.ModelBinding; using Xunit; -namespace Microsoft.AspNet.Mvc.Rendering +namespace Microsoft.AspNet.Mvc { public class ViewDataOfTTest { @@ -37,7 +37,7 @@ namespace Microsoft.AspNet.Mvc.Rendering public void SettingModelWorksForCompatibleTypes() { // Arrange - string value = "some value"; + var value = "some value"; var viewDataOfT = new ViewDataDictionary(new DataAnnotationsModelMetadataProvider()); ViewDataDictionary viewData = viewDataOfT; @@ -47,5 +47,47 @@ namespace Microsoft.AspNet.Mvc.Rendering // Assert Assert.Same(value, viewDataOfT.Model); } + + [Fact] + public void PropertiesInitializedCorrectly() + { + // Arrange + var viewData = new ViewDataDictionary(new DataAnnotationsModelMetadataProvider()); + + // Act & Assert + Assert.Empty(viewData); + Assert.Equal(0, viewData.Count); + Assert.False(viewData.IsReadOnly); + + Assert.NotNull(viewData.Keys); + Assert.Empty(viewData.Keys); + + Assert.Null(viewData.Model); + Assert.NotNull(viewData.ModelMetadata); + Assert.NotNull(viewData.ModelState); + + Assert.NotNull(viewData.TemplateInfo); + Assert.Equal(0, viewData.TemplateInfo.TemplateDepth); + Assert.Equal(string.Empty, viewData.TemplateInfo.FormattedModelValue); + Assert.Equal(string.Empty, viewData.TemplateInfo.HtmlFieldPrefix); + + Assert.NotNull(viewData.Values); + Assert.Empty(viewData.Values); + } + + [Fact] + public void TemplateInfoPropertiesAreNeverNull() + { + // Arrange + var viewData = new ViewDataDictionary(new DataAnnotationsModelMetadataProvider()); + + // Act + viewData.TemplateInfo.FormattedModelValue = null; + viewData.TemplateInfo.HtmlFieldPrefix = null; + + // Assert + Assert.Equal(string.Empty, viewData.TemplateInfo.FormattedModelValue); + Assert.Equal(string.Empty, viewData.TemplateInfo.HtmlFieldPrefix); + } } }