diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs
index ba04cf35a1..03e2b32be6 100644
--- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultDisplayTemplates.cs
@@ -213,7 +213,13 @@ namespace Microsoft.AspNet.Mvc.Rendering
if (templateInfo.TemplateDepth > 1)
{
- return modelMetadata.Model == null ? modelMetadata.NullDisplayText : modelMetadata.SimpleDisplayText;
+ var text = modelMetadata.SimpleDisplayText;
+ if (modelMetadata.HtmlEncode)
+ {
+ text = html.Encode(text);
+ }
+
+ return text;
}
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
diff --git a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs
index 848fda53ae..742414c807 100644
--- a/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/Rendering/Html/DefaultEditorTemplates.cs
@@ -232,7 +232,18 @@ namespace Microsoft.AspNet.Mvc.Rendering
if (templateInfo.TemplateDepth > 1)
{
- return modelMetadata.Model == null ? modelMetadata.NullDisplayText : modelMetadata.SimpleDisplayText;
+ if (modelMetadata.Model == null)
+ {
+ return modelMetadata.NullDisplayText;
+ }
+
+ var text = modelMetadata.SimpleDisplayText;
+ if (modelMetadata.HtmlEncode)
+ {
+ text = html.Encode(text);
+ }
+
+ return text;
}
var serviceProvider = html.ViewContext.HttpContext.RequestServices;
diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs
index b5d292cf05..c21d4fd24a 100644
--- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs
+++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedDataAnnotationsModelMetadata.cs
@@ -205,6 +205,25 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
return base.ComputeHideSurroundingHtml();
}
+ ///
+ /// Calculate based on presence of a
+ /// and its value.
+ ///
+ ///
+ /// Calculated value. false if a
+ /// exists and its value
+ /// is false. true otherwise.
+ ///
+ protected override bool ComputeHtmlEncode()
+ {
+ if (PrototypeCache.DisplayFormat != null)
+ {
+ return PrototypeCache.DisplayFormat.HtmlEncode;
+ }
+
+ return base.ComputeHtmlEncode();
+ }
+
protected override bool ComputeIsReadOnly()
{
if (PrototypeCache.Editable != null)
diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs
index 130c6bf53c..257c278cb0 100644
--- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs
+++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/CachedModelMetadata.cs
@@ -24,6 +24,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
private string _editFormatString;
private bool _hasNonDefaultEditFormat;
private bool _hideSurroundingHtml;
+ private bool _htmlEncode;
private bool _isReadOnly;
private bool _isComplexType;
private bool _isRequired;
@@ -39,6 +40,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
private bool _editFormatStringComputed;
private bool _hasNonDefaultEditFormatComputed;
private bool _hideSurroundingHtmlComputed;
+ private bool _htmlEncodeComputed;
private bool _isReadOnlyComputed;
private bool _isComplexTypeComputed;
private bool _isRequiredComputed;
@@ -252,6 +254,27 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
}
}
+ ///
+ public sealed override bool HtmlEncode
+ {
+ get
+ {
+ if (!_htmlEncodeComputed)
+ {
+ _htmlEncode = ComputeHtmlEncode();
+ _htmlEncodeComputed = true;
+ }
+
+ return _htmlEncode;
+ }
+
+ set
+ {
+ _htmlEncode = value;
+ _htmlEncodeComputed = true;
+ }
+ }
+
public sealed override bool IsReadOnly
{
get
@@ -419,6 +442,15 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
return base.HideSurroundingHtml;
}
+ ///
+ /// Calculate the value.
+ ///
+ /// Calculated value.
+ protected virtual bool ComputeHtmlEncode()
+ {
+ return base.HtmlEncode;
+ }
+
protected virtual bool ComputeIsReadOnly()
{
return base.IsReadOnly;
diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs
index 39c54f0b0e..93cab06edb 100644
--- a/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs
+++ b/src/Microsoft.AspNet.Mvc.ModelBinding/Metadata/ModelMetadata.cs
@@ -19,17 +19,18 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
private EfficientTypePropertyKey _cacheKey;
// Backing fields for virtual properties with default values.
- private bool _convertEmptyStringToNull;
- private bool _isRequired;
+ private bool _convertEmptyStringToNull = true;
+ private bool _htmlEncode = true;
+ private bool _showForDisplay = true;
+ private bool _showForEdit = true;
private object _model;
private Func