(metadataProvider));
+ helper.ViewContext.ClientValidationEnabled = false;
+ helper.ViewData.Model = new TestModel { Property1 = "propValue" };
+
+ // Act
+ var textBoxForResult = helper.TextBoxFor(m => m.Property1, htmlAttributes: new { attr = "value" });
+
+ // Assert
+ Assert.Equal(
+ " ",
+ HtmlContentUtilities.HtmlContentToString(textBoxForResult));
+ }
+
+ private class TestModel
+ {
+ public string Property1 { get; set; }
+ }
+ }
+}
diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationMessageExtensionsTest.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationMessageExtensionsTest.cs
new file mode 100644
index 0000000000..b9e1f5fc4f
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationMessageExtensionsTest.cs
@@ -0,0 +1,135 @@
+// 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.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc.TestCommon;
+using Xunit;
+
+namespace Microsoft.AspNetCore.Mvc.Core
+{
+ ///
+ /// Test the ValidationMessage extensions in class.
+ ///
+ public class HtmlHelperValidationMessageExtensionsTest
+ {
+ [Fact]
+ public void ValidationMessage_UsesSpecifiedExpression()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageResult = helper.ValidationMessage("Property1");
+
+ // Assert
+ Assert.Equal(
+ " ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageResult));
+ }
+
+ [Fact]
+ public void ValidationMessageFor_UsesSpecifiedExpression()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageForResult = helper.ValidationMessageFor(m => m.Property1);
+
+ // Assert
+ Assert.Equal(
+ " ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageForResult));
+ }
+
+ [Fact]
+ public void ValidationMessage_UsesSpecifiedMessage()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageResult = helper.ValidationMessage("Property1", message: "Custom Message");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageResult));
+ }
+
+ [Fact]
+ public void ValidationMessageFor_UsesSpecifiedMessage()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageForResult = helper.ValidationMessageFor(m => m.Property1, message: "Custom Message");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageForResult));
+ }
+
+ [Fact]
+ public void ValidationMessage_UsesSpecifiedHtmlAttributes()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageResult = helper.ValidationMessage("Property1", message: "Custom Message", htmlAttributes: new { attr="value" });
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageResult));
+ }
+
+ [Fact]
+ public void ValidationMessageFor_UsesSpecifiedHtmlAttributes()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageForResult = helper.ValidationMessageFor(m => m.Property1, message: "Custom Message", htmlAttributes: new { attr = "value" });
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] ",
+ HtmlContentUtilities.HtmlContentToString(validationMessageForResult));
+ }
+
+ [Fact]
+ public void ValidationMessage_UsesSpecifiedTag()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageResult = helper.ValidationMessage("Property1", message: "Custom Message", tag: "div");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]]
",
+ HtmlContentUtilities.HtmlContentToString(validationMessageResult));
+ }
+
+ [Fact]
+ public void ValidationMessageFor_UsesSpecifiedTag()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+
+ // Act
+ var validationMessageForResult = helper.ValidationMessageFor(m => m.Property1, message: "Custom Message", tag: "div");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]]
",
+ HtmlContentUtilities.HtmlContentToString(validationMessageForResult));
+ }
+ }
+}
diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationSummaryTest.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationSummaryTest.cs
index 2d4377c5de..d29a01891a 100644
--- a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationSummaryTest.cs
+++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/Rendering/HtmlHelperValidationSummaryTest.cs
@@ -335,6 +335,156 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
Assert.Equal(expected, HtmlContentUtilities.HtmlContentToString(result));
}
+ [Fact]
+ public void ValidationSummary_UsesValuesFromModelState()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary();
+
+ // Assert
+ Assert.Equal(
+ "" +
+ "
HtmlEncode[[Error for Property1]] \r\n ",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_ExcludesPropertyErrors()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(excludePropertyErrors: true);
+
+ // Assert
+ Assert.Equal(
+ "",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedMessage()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(message: "Custom Message");
+
+ // Assert
+ Assert.Equal(
+ "" +
+ "
HtmlEncode[[Custom Message]] \r\n
HtmlEncode[[Error for Property1]] \r\n ",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedTag()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(message: "Custom Message", tag: "div");
+
+ // Assert
+ Assert.Equal(
+ "" +
+ "
HtmlEncode[[Custom Message]]
\r\n
HtmlEncode[[Error for Property1]] \r\n ",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedMessageAndExcludesPropertyErrors()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(excludePropertyErrors: true, message: "Custom Message");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] \r\n
",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedHtmlAttributes()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(message: "Custom Message", htmlAttributes: new { attr="value" });
+
+ // Assert
+ Assert.Equal(
+ "" +
+ "
HtmlEncode[[Custom Message]] \r\n
HtmlEncode[[Error for Property1]] \r\n ",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedHtmlAttributesAndTag()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(message: "Custom Message", htmlAttributes: new { attr = "value" }, tag: "div");
+
+ // Assert
+ Assert.Equal(
+ "" +
+ "
HtmlEncode[[Custom Message]]
\r\n
HtmlEncode[[Error for Property1]] \r\n ",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedUsesSpecifiedTagAndExcludesPropertyErrors()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(excludePropertyErrors: true, message: "Custom Message", tag: "div");
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]]
\r\n
",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
+ [Fact]
+ public void ValidationSummary_UsesSpecifiedUsesSpecifiedHtmlAttributesAndExcludesPropertyErrors()
+ {
+ // Arrange
+ var helper = DefaultTemplatesUtilities.GetHtmlHelper();
+ helper.ViewData.ModelState.AddModelError("Property1", "Error for Property1");
+
+ // Act
+ var validationSummaryResult = helper.ValidationSummary(excludePropertyErrors: true, message: "Custom Message", htmlAttributes: new { attr = "value" });
+
+ // Assert
+ Assert.Equal(
+ "HtmlEncode[[Custom Message]] \r\n" +
+ "
",
+ HtmlContentUtilities.HtmlContentToString(validationSummaryResult));
+ }
+
// Adds errors for various parts of the model, including the root.
private void AddMultipleErrors(ModelStateDictionary modelState)
{