Fix #2407 - Add back the implicit [Required] for value types

This change adds a [Required] client validator when
ModelMetadata.IsRequired == true. The bulk of the changes here are
mechanical updates to test files.
This commit is contained in:
Ryan Nowak 2015-05-21 00:08:07 -07:00
parent e689863461
commit b64fd7ae39
27 changed files with 233 additions and 163 deletions

View File

@ -32,14 +32,24 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
/// <inheritdoc />
public void GetValidators(ClientValidatorProviderContext context)
{
var hasRequiredAttribute = false;
foreach (var attribute in context.ValidatorMetadata.OfType<ValidationAttribute>())
{
hasRequiredAttribute |= attribute is RequiredAttribute;
DataAnnotationsClientModelValidationFactory factory;
if (_attributeFactories.TryGetValue(attribute.GetType(), out factory))
{
context.Validators.Add(factory(attribute));
}
}
if (!hasRequiredAttribute && context.ModelMetadata.IsRequired)
{
// Add a default '[Required]' validator for generating HTML if necessary.
context.Validators.Add(new RequiredAttributeAdapter(new RequiredAttribute()));
}
}
private static Dictionary<Type, DataAnnotationsClientModelValidationFactory> BuildAttributeFactoriesDictionary()

View File

@ -14,12 +14,53 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
private readonly IModelMetadataProvider _metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
[Fact]
public void GetValidators_DoesNotAddRequiredAttribute_IfAttributeIsSpecifiedExplicitly()
public void GetValidators_AddsRequiredAttribute_ForIsRequiredTrue()
{
// Arrange
var provider = new DataAnnotationsClientModelValidatorProvider();
var metadata = _metadataProvider.GetMetadataForProperty(typeof(DummyRequiredAttributeHelperClass),
"WithAttribute");
var metadata = _metadataProvider.GetMetadataForProperty(
typeof(DummyRequiredAttributeHelperClass),
nameof(DummyRequiredAttributeHelperClass.ValueTypeWithoutAttribute));
var providerContext = new ClientValidatorProviderContext(metadata);
// Act
provider.GetValidators(providerContext);
// Assert
var validator = Assert.Single(providerContext.Validators);
Assert.IsType<RequiredAttributeAdapter>(validator);
}
[Fact]
public void GetValidators_DoesNotAddRequiredAttribute_ForIsRequiredFalse()
{
// Arrange
var provider = new DataAnnotationsClientModelValidatorProvider();
var metadata = _metadataProvider.GetMetadataForProperty(
typeof(DummyRequiredAttributeHelperClass),
nameof(DummyRequiredAttributeHelperClass.ReferenceTypeWithoutAttribute));
var providerContext = new ClientValidatorProviderContext(metadata);
// Act
provider.GetValidators(providerContext);
// Assert
Assert.Empty(providerContext.Validators);
}
[Fact]
public void GetValidators_DoesNotAddExtraRequiredAttribute_IfAttributeIsSpecifiedExplicitly()
{
// Arrange
var provider = new DataAnnotationsClientModelValidatorProvider();
var metadata = _metadataProvider.GetMetadataForProperty(
typeof(DummyRequiredAttributeHelperClass),
nameof(DummyRequiredAttributeHelperClass.WithAttribute));
var providerContext = new ClientValidatorProviderContext(metadata);
@ -76,8 +117,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
[Theory]
[MemberData(nameof(DataAnnotationAdapters))]
public void AdapterFactory_RegistersAdapters_ForDataAnnotationAttributes(ValidationAttribute attribute,
Type expectedAdapterType)
public void AdapterFactory_RegistersAdapters_ForDataAnnotationAttributes(
ValidationAttribute attribute,
Type expectedAdapterType)
{
// Arrange
var adapters = new DataAnnotationsClientModelValidatorProvider().AttributeFactories;
@ -103,8 +145,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
[Theory]
[MemberData(nameof(DataTypeAdapters))]
public void AdapterFactory_RegistersAdapters_ForDataTypeAttributes(ValidationAttribute attribute,
string expectedRuleName)
public void AdapterFactory_RegistersAdapters_ForDataTypeAttributes(
ValidationAttribute attribute,
string expectedRuleName)
{
// Arrange
var adapters = new DataAnnotationsClientModelValidatorProvider().AttributeFactories;
@ -148,7 +191,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
[Required(ErrorMessage = "Custom Required Message")]
public int WithAttribute { get; set; }
public int WithoutAttribute { get; set; }
public int ValueTypeWithoutAttribute { get; set; }
public string ReferenceTypeWithoutAttribute { get; set; }
}
}
}

View File

@ -117,7 +117,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
// Assert
var validators = context.Validators;
Assert.IsType<RangeAttributeAdapter>(Assert.Single(validators));
Assert.Equal(2, validators.Count);
Assert.Single(validators, v => v is RangeAttributeAdapter);
Assert.Single(validators, v => v is RequiredAttributeAdapter);
}
[Fact]
@ -159,7 +161,9 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
// Assert
var validators = context.Validators;
Assert.IsType<RangeAttributeAdapter>(Assert.Single(validators));
Assert.Equal(2, validators.Count);
Assert.Single(validators, v => v is RangeAttributeAdapter);
Assert.Single(validators, v => v is RequiredAttributeAdapter);
}
[Fact]
@ -245,7 +249,7 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
private class CustomValidationAttributeOnProperty
{
[CustomValidation]
public int Property { get; set; }
public string Property { get; set; }
}
private class ProductEntity

View File

@ -96,38 +96,16 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
Assert.Single(validators, v => Assert.IsType<CustomModelValidatorAttribute>(v).Tag == "Property");
}
// RangeAttribute is an example of a ValidationAttribute with it's own adapter type.
[Fact]
public void GetValidators_DataAnnotationsAttribute_SpecificAdapter()
{
// Arrange
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var validatorProvider = TestClientModelValidatorProvider.CreateDefaultProvider();
var metadata = metadataProvider.GetMetadataForProperty(
typeof(RangeAttributeOnProperty),
nameof(RangeAttributeOnProperty.Property));
var context = new ClientValidatorProviderContext(metadata);
// Act
validatorProvider.GetValidators(context);
// Assert
var validators = context.Validators;
Assert.IsType<RangeAttributeAdapter>(Assert.Single(validators));
}
[Fact]
public void GetValidators_DataAnnotationsAttribute_DefaultAdapter()
public void GetValidators_FromModelMetadataType_SingleValidator()
{
// Arrange
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var validatorProvider = TestModelValidatorProvider.CreateDefaultProvider();
var metadata = metadataProvider.GetMetadataForProperty(
typeof(CustomValidationAttributeOnProperty),
nameof(CustomValidationAttributeOnProperty.Property));
typeof(ProductViewModel),
nameof(ProductViewModel.Id));
var context = new ModelValidatorProviderContext(metadata);
// Act
@ -136,28 +114,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
// Assert
var validators = context.Validators;
Assert.IsType<DataAnnotationsModelValidator>(Assert.Single(validators));
}
[Fact]
public void GetValidators_FromModelMetadataType_SingleValidator()
{
// Arrange
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var validatorProvider = TestClientModelValidatorProvider.CreateDefaultProvider();
var metadata = metadataProvider.GetMetadataForProperty(
typeof(ProductViewModel),
nameof(ProductViewModel.Id));
var context = new ClientValidatorProviderContext(metadata);
// Act
validatorProvider.GetValidators(context);
// Assert
var validators = context.Validators;
Assert.IsType<RangeAttributeAdapter>(Assert.Single(validators));
var adapter = Assert.IsType<DataAnnotationsModelValidator>(Assert.Single(validators));
Assert.IsType<RangeAttribute>(adapter.Attribute);
}
[Fact]
@ -165,12 +123,12 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
{
// Arrange
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var validatorProvider = TestClientModelValidatorProvider.CreateDefaultProvider();
var validatorProvider = TestModelValidatorProvider.CreateDefaultProvider();
var metadata = metadataProvider.GetMetadataForProperty(
typeof(ProductViewModel),
nameof(ProductViewModel.Name));
var context = new ClientValidatorProviderContext(metadata);
var context = new ModelValidatorProviderContext(metadata);
// Act
validatorProvider.GetValidators(context);
@ -179,8 +137,8 @@ namespace Microsoft.AspNet.Mvc.ModelBinding.Validation
var validators = context.Validators;
Assert.Equal(2, validators.Count);
Assert.Single(validators, v => v is RegularExpressionAttributeAdapter);
Assert.Single(validators, v => v is StringLengthAttributeAdapter);
Assert.Single(validators, v => ((DataAnnotationsModelValidator)v).Attribute is RegularExpressionAttribute);
Assert.Single(validators, v => ((DataAnnotationsModelValidator)v).Attribute is StringLengthAttribute);
}
private class ValidatableObject : IValidatableObject

View File

@ -589,8 +589,13 @@ Environment.NewLine;
public void Editor_FindsCorrectDateOrTimeTemplate(string dataTypeName, string editFormatString, string expected)
{
// Arrange
var expectedInput = "<input class=\"HtmlEncode[[text-box single-line]]\" id=\"HtmlEncode[[FieldPrefix]]\" name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName + "]]\" value=\"HtmlEncode[[" + expected + "]]\" />";
var expectedInput =
"<input class=\"HtmlEncode[[text-box single-line]]\" data-val=\"HtmlEncode[[true]]\" " +
"data-val-required=\"HtmlEncode[[The DateTimeOffset field is required.]]\" id=\"HtmlEncode[[FieldPrefix]]\" " +
"name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName +
"]]\" value=\"HtmlEncode[[" + expected + "]]\" />";
var offset = TimeSpan.FromHours(0);
var model = new DateTimeOffset(
year: 2000,
@ -636,8 +641,12 @@ Environment.NewLine;
public void Editor_AppliesRfc3339(string dataTypeName, string editFormatString, string expected)
{
// Arrange
var expectedInput = "<input class=\"HtmlEncode[[text-box single-line]]\" id=\"HtmlEncode[[FieldPrefix]]\" name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName + "]]\" value=\"HtmlEncode[[" + expected + "]]\" />";
var expectedInput =
"<input class=\"HtmlEncode[[text-box single-line]]\" data-val=\"HtmlEncode[[true]]\" " +
"data-val-required=\"HtmlEncode[[The DateTimeOffset field is required.]]\" id=\"HtmlEncode[[FieldPrefix]]\" " +
"name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName +
"]]\" value=\"HtmlEncode[[" + expected + "]]\" />";
// Place DateTime-local value in current timezone.
var offset = string.Equals("", dataTypeName) ? DateTimeOffset.Now.Offset : TimeSpan.FromHours(0);
@ -689,8 +698,13 @@ Environment.NewLine;
public void Editor_AppliesNonDefaultEditFormat(string dataTypeName, Html5DateRenderingMode renderingMode)
{
// Arrange
var expectedInput = "<input class=\"HtmlEncode[[text-box single-line]]\" id=\"HtmlEncode[[FieldPrefix]]\" name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName + "]]\" value=\"HtmlEncode[[Formatted as 2000-01-02T03:04:05.0600000+00:00]]\" />";
var expectedInput =
"<input class=\"HtmlEncode[[text-box single-line]]\" data-val=\"HtmlEncode[[true]]\" " +
"data-val-required=\"HtmlEncode[[The DateTimeOffset field is required.]]\" id=\"HtmlEncode[[FieldPrefix]]\" " +
"name=\"HtmlEncode[[FieldPrefix]]\" type=\"HtmlEncode[[" +
dataTypeName +
"]]\" value=\"HtmlEncode[[Formatted as 2000-01-02T03:04:05.0600000+00:00]]\" />";
var offset = TimeSpan.FromHours(0);
var model = new DateTimeOffset(
year: 2000,

View File

@ -17,8 +17,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxOverridesCalculatedValuesWithValuesFromHtmlAttributes()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Property3]]"" name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Boolean field is required.]]"" id=""HtmlEncode[[Property3]]"" " +
@"name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
// Act
@ -34,8 +37,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxExplicitParametersOverrideDictionary_ForValueInModel()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Property3]]"" name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Boolean field is required.]]"" id=""HtmlEncode[[Property3]]"" " +
@"name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
// Act
@ -81,8 +88,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxCheckedWithOnlyName()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Boolean field is required.]]"" id=""HtmlEncode[[Property1]]"" " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
// Act
@ -96,8 +106,10 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxUsesAttemptedValueFromModelState()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Boolean field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var valueProviderResult = new ValueProviderResult("false", "false", CultureInfo.InvariantCulture);
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
helper.ViewData.ModelState.SetModelValue("Property1", valueProviderResult);
@ -129,9 +141,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxReplacesUnderscoresInHtmlAttributesWithDashes()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " +
@"Property1-Property3=""HtmlEncode[[Property3ObjValue]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Boolean field is required.]]"" id=""HtmlEncode[[Property1]]"" " +
@"name=""HtmlEncode[[Property1]]"" Property1-Property3=""HtmlEncode[[Property3ObjValue]]"" " +
@"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
var htmlAttributes = new { Property1_Property3 = "Property3ObjValue" };
@ -184,9 +199,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxWithPrefixAndEmptyName()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[MyPrefix]]"" name=""HtmlEncode[[MyPrefix]]"" Property3=""HtmlEncode[[Property3Value]]"" " +
@"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Boolean field is required.]]"" " +
@"id=""HtmlEncode[[MyPrefix]]"" name=""HtmlEncode[[MyPrefix]]"" Property3=""HtmlEncode[[Property3Value]]"" " +
@"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(model: false);
var attributes = new Dictionary<string, object> { { "Property3", "Property3Value" } };
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
@ -202,9 +219,12 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxWithComplexExpressionsEvaluatesValuesInViewDataDictionary()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[ComplexProperty_Property1]]"" name=""HtmlEncode[[ComplexProperty." +
@"Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[ComplexProperty.Property1]]""" +
@" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Boolean field is required.]]"" id=""HtmlEncode[[ComplexProperty_Property1]]"" " +
@"name=""HtmlEncode[[ComplexProperty." +
@"Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[ComplexProperty.Property1]]""" +
@" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetModelWithValidationViewData());
// Act
@ -218,8 +238,10 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxForWithNullContainer_TreatsBooleanAsFalse()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var viewData = GetTestModelViewData();
var helper = DefaultTemplatesUtilities.GetHtmlHelper(viewData);
var valueProviderResult = new ValueProviderResult("false", "false", CultureInfo.InvariantCulture);
@ -238,8 +260,10 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxForWithNonNullContainer_UsesPropertyValue(bool value, string expectedChecked)
{
// Arrange
var expected = @"<input {0}id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input {0}data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
expected = string.Format(expected, expectedChecked);
var viewData = GetTestModelViewData();
@ -261,8 +285,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxForOverridesCalculatedParametersWithValuesFromHtmlAttributes()
{
// Arrange
var expected = @"<input checked=""HtmlEncode[[checked]]"" id=""HtmlEncode[[Property3]]"" name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input checked=""HtmlEncode[[checked]]"" data-val=""HtmlEncode[[true]]"" " +
@"data-val-required=""HtmlEncode[[The Property3 field is required.]]"" " +
@"id=""HtmlEncode[[Property3]]"" name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[checkbox]]"" " +
@"value=""HtmlEncode[[false]]"" /><input name=""HtmlEncode[[Property3]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
// Act
@ -299,8 +326,10 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxFor_UsesModelStateAttemptedValue(string attemptedValue, string expectedChecked)
{
// Arrange
var expected = @"<input {0}id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input {0}data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" />" +
@"<input name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
expected = string.Format(expected, expectedChecked);
var viewData = GetTestModelViewData();
@ -320,9 +349,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxFor_WithObjectAttribute_MapsUnderscoresInNamesToDashes()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " +
@"Property1-Property3=""HtmlEncode[[Property3ObjValue]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " +
@"Property1-Property3=""HtmlEncode[[Property3ObjValue]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
var htmlAttributes = new { Property1_Property3 = "Property3ObjValue" };
@ -337,9 +368,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxForWith_AttributeDictionary_GeneratesExpectedAttributes()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " +
@"Property3=""HtmlEncode[[Property3Value]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[Property1]]"" name=""HtmlEncode[[Property1]]"" " +
@"Property3=""HtmlEncode[[Property3Value]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input " +
@"name=""HtmlEncode[[Property1]]"" type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
var attributes = new Dictionary<string, object> { { "Property3", "Property3Value" } };
@ -354,9 +387,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxForWithPrefix()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[MyPrefix_Property1]]"" name=""HtmlEncode[[MyPrefix.Property1]]"" Property3=""HtmlEncode[[PropValue]]"" " +
@"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix.Property1]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[MyPrefix_Property1]]"" name=""HtmlEncode[[MyPrefix.Property1]]"" Property3=""HtmlEncode[[PropValue]]"" " +
@"type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[MyPrefix.Property1]]"" type=""HtmlEncode[[hidden]]"" " +
@"value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetTestModelViewData());
helper.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
var attributes = new Dictionary<string, object> { { "Property3", "PropValue" } };
@ -372,9 +407,11 @@ namespace Microsoft.AspNet.Mvc.Rendering
public void CheckBoxFor_WithComplexExpressions_DoesNotUseValuesFromViewDataDictionary()
{
// Arrange
var expected = @"<input id=""HtmlEncode[[ComplexProperty_Property1]]"" name=""HtmlEncode[[ComplexProperty." +
@"Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[ComplexProperty.Property1]]"" " +
@"type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var expected =
@"<input data-val=""HtmlEncode[[true]]"" data-val-required=""HtmlEncode[[The Property1 field is required.]]"" " +
@"id=""HtmlEncode[[ComplexProperty_Property1]]"" name=""HtmlEncode[[ComplexProperty." +
@"Property1]]"" type=""HtmlEncode[[checkbox]]"" value=""HtmlEncode[[true]]"" /><input name=""HtmlEncode[[ComplexProperty.Property1]]"" " +
@"type=""HtmlEncode[[hidden]]"" value=""HtmlEncode[[false]]"" />";
var helper = DefaultTemplatesUtilities.GetHtmlHelper(GetModelWithValidationViewData());
// Act

View File

@ -60,7 +60,7 @@ False";
<ValidationInView class=""field-validation-error"" data-valmsg-for=""Error"" data-valmsg-replace=""true"">An error occurred.</ValidationInView>
<input id=""Prefix!Property1"" name=""Prefix.Property1"" type=""text"" value="""" />
<div class=""editor-label""><label for=""MyDate"">MyDate</label></div>
<div class=""editor-field""><input class=""text-box single-line"" id=""MyDate"" name=""MyDate"" type=""datetime"" value=""02/01/2000 03:04:05 &#x2B;00:00"" /> <ValidationInView class=""field-validation-valid"" data-valmsg-for=""MyDate"" data-valmsg-replace=""true""></ValidationInView></div>
<div class=""editor-field""><input class=""text-box single-line"" data-val=""true"" data-val-required=""The MyDate field is required."" id=""MyDate"" name=""MyDate"" type=""datetime"" value=""02/01/2000 03:04:05 &#x2B;00:00"" /> <ValidationInView class=""field-validation-valid"" data-valmsg-for=""MyDate"" data-valmsg-replace=""true""></ValidationInView></div>
True

View File

@ -236,9 +236,11 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
{
// Arrange
var assemblyNamePrefix = GetAssemblyNamePrefix();
var expected = @"<root data-root=""true""><input class=""form-control"" type=""number"" data-val=""true""" +
var expected =
@"<root data-root=""true""><input class=""form-control"" type=""number"" data-val=""true""" +
@" data-val-range=""The field Age must be between 10 and 100."" data-val-range-max=""100"" "+
@"data-val-range-min=""10"" id=""Age"" name=""Age"" value="""" /><a href="""">Back to List</a></root>";
@"data-val-range-min=""10"" data-val-required=""The Age field is required."" " +
@"id=""Age"" name=""Age"" value="""" /><a href="""">Back to List</a></root>";
var server = TestHelper.CreateServer(_app, SiteName, _configureServices);
var client = server.CreateClient();

View File

@ -9,14 +9,14 @@
<div class="editor-label"><label for="Vin">Vin</label></div>
<div class="editor-field"><input class="input-validation-error text-box single-line" data-val="true" data-val-length="The field Vin must be a string with a maximum length of 8." data-val-length-max="8" data-val-required="The Vin field is required." id="Vin" name="Vin" type="text" value="8765432112345678" /> <span class="field-validation-error" data-valmsg-for="Vin" data-valmsg-replace="true">The field Vin must be a string with a maximum length of 8.</span></div>
<div class="editor-label"><label for="Year">Year</label></div>
<div class="editor-field"><input class="input-validation-error text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" id="Year" name="Year" type="number" value="1979" /> <span class="field-validation-error" data-valmsg-for="Year" data-valmsg-replace="true">The field Year must be between 1980 and 2034.</span></div>
<div class="editor-field"><input class="input-validation-error text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" data-val-required="The Year field is required." id="Year" name="Year" type="number" value="1979" /> <span class="field-validation-error" data-valmsg-for="Year" data-valmsg-replace="true">The field Year must be between 1980 and 2034.</span></div>
<div class="editor-label"><label for="LastUpdatedTrackingId">LastUpdatedTrackingId</label></div>
<div class="editor-field"><input class="text-box single-line" id="LastUpdatedTrackingId" name="LastUpdatedTrackingId" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="LastUpdatedTrackingId" data-valmsg-replace="true"></span></div>
<div class="editor-label">
<label for="InspectedDates">InspectedDates</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="InspectedDates_0_" name="InspectedDates[0]" type="datetime" value="14/10/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_1_" name="InspectedDates[1]" type="datetime" value="16/10/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_2_" name="InspectedDates[2]" type="datetime" value="02/11/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_3_" name="InspectedDates[3]" type="datetime" value="13/11/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_4_" name="InspectedDates[4]" type="datetime" value="05/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_5_" name="InspectedDates[5]" type="datetime" value="12/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_6_" name="InspectedDates[6]" type="datetime" value="19/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_7_" name="InspectedDates[7]" type="datetime" value="26/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_8_" name="InspectedDates[8]" type="datetime" value="28/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_9_" name="InspectedDates[9]" type="datetime" value="29/12/1979 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_10_" name="InspectedDates[10]" type="datetime" value="01/04/1980 00:00:00 -08:00" />
<input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_0_" name="InspectedDates[0]" type="datetime" value="14/10/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_1_" name="InspectedDates[1]" type="datetime" value="16/10/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_2_" name="InspectedDates[2]" type="datetime" value="02/11/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_3_" name="InspectedDates[3]" type="datetime" value="13/11/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_4_" name="InspectedDates[4]" type="datetime" value="05/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_5_" name="InspectedDates[5]" type="datetime" value="12/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_6_" name="InspectedDates[6]" type="datetime" value="19/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_7_" name="InspectedDates[7]" type="datetime" value="26/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_8_" name="InspectedDates[8]" type="datetime" value="28/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_9_" name="InspectedDates[9]" type="datetime" value="29/12/1979 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_10_" name="InspectedDates[10]" type="datetime" value="01/04/1980 00:00:00 -08:00" />
</div>
<input type="submit" value="Update" />
</form></div>

View File

@ -7,14 +7,14 @@
<div class="editor-label"><label for="Vin">Vin</label></div>
<div class="editor-field"><input class="text-box single-line" data-val="true" data-val-length="The field Vin must be a string with a maximum length of 8." data-val-length-max="8" data-val-required="The Vin field is required." id="Vin" name="Vin" type="text" value="87654321" /> <span class="field-validation-valid" data-valmsg-for="Vin" data-valmsg-replace="true"></span></div>
<div class="editor-label"><label for="Year">Year</label></div>
<div class="editor-field"><input class="text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" id="Year" name="Year" type="number" value="2013" /> <span class="field-validation-valid" data-valmsg-for="Year" data-valmsg-replace="true"></span></div>
<div class="editor-field"><input class="text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" data-val-required="The Year field is required." id="Year" name="Year" type="number" value="2013" /> <span class="field-validation-valid" data-valmsg-for="Year" data-valmsg-replace="true"></span></div>
<div class="editor-label"><label for="LastUpdatedTrackingId">LastUpdatedTrackingId</label></div>
<div class="editor-field"><input class="text-box single-line" id="LastUpdatedTrackingId" name="LastUpdatedTrackingId" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="LastUpdatedTrackingId" data-valmsg-replace="true"></span></div>
<div class="editor-label">
<label for="InspectedDates">InspectedDates</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="InspectedDates_0_" name="InspectedDates[0]" type="datetime" value="01/04/2001 00:00:00 -08:00" /><input class="text-box single-line" id="InspectedDates_1_" name="InspectedDates[1]" type="datetime" value="01/01/0001 00:00:00 &#x2B;00:00" />
<input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_0_" name="InspectedDates[0]" type="datetime" value="01/04/2001 00:00:00 -08:00" /><input class="text-box single-line" data-val="true" data-val-required="The DateTimeOffset field is required." id="InspectedDates_1_" name="InspectedDates[1]" type="datetime" value="01/01/0001 00:00:00 &#x2B;00:00" />
</div>
<input type="submit" value="Update" />
</form></div>

View File

@ -6,7 +6,7 @@
<form action="/Customer/MvcTagHelper_Customer" method="post">
<div>
<label class="order" for="Number">Number</label>
<input class="form-control input-validation-error" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Number" name="Number" value="" />
<input class="form-control input-validation-error" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." id="Number" name="Number" value="" />
<span class="field-validation-error" data-valmsg-for="Number" data-valmsg-replace="true">The value &#x27;&#x27; is invalid.</span>
</div>
<div>
@ -29,7 +29,7 @@
</div>
<div>
<label class="order" for="Gender">Gender</label>
<input type="radio" value="Male" id="Gender" name="Gender" /> Male
<input type="radio" value="Male" data-val="true" data-val-required="The Gender field is required." id="Gender" name="Gender" /> Male
<input type="radio" value="Female" id="Gender" name="Gender" /> Female
<span class="field-validation-valid" data-valmsg-for="Gender" data-valmsg-replace="true"></span>
</div>

View File

@ -10,7 +10,7 @@
</div>
<div>
<label class="warehouse" for="Product">Product</label>
<select data-val="true" data-val-range="The field Product must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Product" name="Product"><option value="0">Product_0</option>
<select data-val="true" data-val-range="The field Product must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Product field is required." id="Product" name="Product"><option value="0">Product_0</option>
<option value="1">Product_1</option>
<option value="2">Product_2</option>
</select>

View File

@ -6,7 +6,7 @@
<form action="/Customer/MvcTagHelper_Customer" method="post">
<div>
<label class="order" for="Number">Number</label>
<input class="form-control" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Number" name="Number" value="" />
<input class="form-control" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." id="Number" name="Number" value="" />
<span class="field-validation-valid" data-valmsg-for="Number" data-valmsg-replace="true"></span>
</div>
<div>
@ -29,7 +29,7 @@
</div>
<div>
<label class="order" for="Gender">Gender</label>
<input type="radio" value="Male" id="Gender" name="Gender" /> Male
<input type="radio" value="Male" data-val="true" data-val-required="The Gender field is required." id="Gender" name="Gender" /> Male
<input type="radio" value="Female" id="Gender" name="Gender" /> Female
<span class="field-validation-valid" data-valmsg-for="Gender" data-valmsg-replace="true"></span>
</div>

View File

@ -28,7 +28,7 @@ HtmlEncode[[Address_1]]</textarea>;
</div>
<div>
<label for="HtmlEncode[[Employee_Gender]]">HtmlEncode[[Gender]]</label>
<input checked="HtmlEncode[[checked]]" id="HtmlEncode[[Employee_Gender]]" name="HtmlEncode[[Employee.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Female]]" /> Female
<input checked="HtmlEncode[[checked]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The Gender field is required.]]" id="HtmlEncode[[Employee_Gender]]" name="HtmlEncode[[Employee.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Female]]" /> Female
<input id="HtmlEncode[[Employee_Gender]]" name="HtmlEncode[[Employee.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Male]]" /> Male
</div>
<div>
@ -38,7 +38,7 @@ HtmlEncode[[Address_1]]</textarea>;
<option>HtmlEncode[[1002]]</option>
</select>
</div>
<input data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" id="HtmlEncode[[Employee_Number]]" name="HtmlEncode[[Employee.Number]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[1]]" />
<input data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" data-val-required="HtmlEncode[[The Number field is required.]]" id="HtmlEncode[[Employee_Number]]" name="HtmlEncode[[Employee.Number]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[1]]" />
<div class="HtmlEncode[[validation-summary-valid]]" data-valmsg-summary="HtmlEncode[[true]]"><ul><li style="display:none"></li>
</ul></div>
<input type="submit" />

View File

@ -28,7 +28,7 @@ Address_1</textarea>;
</div>
<div>
<label for="Employee_Gender">Gender</label>
<input checked="checked" id="Employee_Gender" name="Employee.Gender" type="radio" value="Female" /> Female
<input checked="checked" data-val="true" data-val-required="The Gender field is required." id="Employee_Gender" name="Employee.Gender" type="radio" value="Female" /> Female
<input id="Employee_Gender" name="Employee.Gender" type="radio" value="Male" /> Male
</div>
<div>
@ -38,7 +38,7 @@ Address_1</textarea>;
<option>1002</option>
</select>
</div>
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Employee_Number" name="Employee.Number" type="hidden" value="1" />
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." id="Employee_Number" name="Employee.Number" type="hidden" value="1" />
<div class="validation-summary-valid" data-valmsg-summary="true"><ul><li style="display:none"></li>
</ul></div>
<input type="submit" />

View File

@ -6,7 +6,7 @@
<form action="/MvcTagHelper_Home/EmployeeList" method="post">
<div>
<label for="z0__Number">Number</label>
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" disabled="disabled" id="z0__Number" name="[0].Number" readonly="readonly" type="text" value="0" />
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." disabled="disabled" id="z0__Number" name="[0].Number" readonly="readonly" type="text" value="0" />
<input class="form-control" type="number" id="z0__Number" name="[0].Number" value="0" />
</div>
<div>
@ -21,13 +21,13 @@ EmployeeName_0</textarea>
<div>
<label class="employee" for="z0__Gender">Gender</label>
<select id="z0__Gender" name="[0].Gender"><option selected="selected">Male</option>
<select data-val="true" data-val-required="The Gender field is required." id="z0__Gender" name="[0].Gender"><option selected="selected">Male</option>
<option>Female</option>
</select>
</div>
<div>
<label class="employee" for="z0__Remote">Remote</label>
<input id="z0__Remote" name="[0].Remote" type="checkbox" value="true" /><input name="[0].Remote" type="hidden" value="false" />
<input data-val="true" data-val-required="The Remote field is required." id="z0__Remote" name="[0].Remote" type="checkbox" value="true" /><input name="[0].Remote" type="hidden" value="false" />
</div>
<div>
<label class="employee" for="z0__OfficeNumber">OfficeNumber</label>
@ -38,7 +38,7 @@ EmployeeName_0</textarea>
</div>
<div>
<label for="z1__Number">Number</label>
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" disabled="disabled" id="z1__Number" name="[1].Number" readonly="readonly" type="text" value="1" />
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." disabled="disabled" id="z1__Number" name="[1].Number" readonly="readonly" type="text" value="1" />
<input class="form-control" type="number" id="z1__Number" name="[1].Number" value="1" />
</div>
<div>
@ -53,13 +53,13 @@ EmployeeName_1</textarea>
<div>
<label class="employee" for="z1__Gender">Gender</label>
<select id="z1__Gender" name="[1].Gender"><option>Male</option>
<select data-val="true" data-val-required="The Gender field is required." id="z1__Gender" name="[1].Gender"><option>Male</option>
<option selected="selected">Female</option>
</select>
</div>
<div>
<label class="employee" for="z1__Remote">Remote</label>
<input id="z1__Remote" name="[1].Remote" type="checkbox" value="true" /><input name="[1].Remote" type="hidden" value="false" />
<input data-val="true" data-val-required="The Remote field is required." id="z1__Remote" name="[1].Remote" type="checkbox" value="true" /><input name="[1].Remote" type="hidden" value="false" />
</div>
<div>
<label class="employee" for="z1__OfficeNumber">OfficeNumber</label>
@ -70,7 +70,7 @@ EmployeeName_1</textarea>
</div>
<div>
<label for="z2__Number">Number</label>
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" disabled="disabled" id="z2__Number" name="[2].Number" readonly="readonly" type="text" value="2" />
<input data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." disabled="disabled" id="z2__Number" name="[2].Number" readonly="readonly" type="text" value="2" />
<input class="form-control" type="number" id="z2__Number" name="[2].Number" value="2" />
</div>
<div>
@ -85,13 +85,13 @@ EmployeeName_2</textarea>
<div>
<label class="employee" for="z2__Gender">Gender</label>
<select id="z2__Gender" name="[2].Gender"><option selected="selected">Male</option>
<select data-val="true" data-val-required="The Gender field is required." id="z2__Gender" name="[2].Gender"><option selected="selected">Male</option>
<option>Female</option>
</select>
</div>
<div>
<label class="employee" for="z2__Remote">Remote</label>
<input checked="checked" id="z2__Remote" name="[2].Remote" type="checkbox" value="true" /><input name="[2].Remote" type="hidden" value="false" />
<input checked="checked" data-val="true" data-val-required="The Remote field is required." id="z2__Remote" name="[2].Remote" type="checkbox" value="true" /><input name="[2].Remote" type="hidden" value="false" />
</div>
<div>
<label class="employee" for="z2__OfficeNumber">OfficeNumber</label>

View File

@ -14,7 +14,7 @@
</div>
<div>
<label class="order" for="HtmlEncode[[ShippingDateTime]]">HtmlEncode[[ShippingDateTime]]</label>
<input type="HtmlEncode[[datetime-local]]" id="HtmlEncode[[ShippingDateTime]]" name="HtmlEncode[[ShippingDateTime]]" value="HtmlEncode[[01/01/0001 00:00:00]]" />
<input type="HtmlEncode[[datetime-local]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The ShippingDateTime field is required.]]" id="HtmlEncode[[ShippingDateTime]]" name="HtmlEncode[[ShippingDateTime]]" value="HtmlEncode[[01/01/0001 00:00:00]]" />
</div>
<div>
<label class="order" for="HtmlEncode[[Products]]">HtmlEncode[[Products]]</label>
@ -34,11 +34,11 @@
</div>
<div>
<label class="order" for="HtmlEncode[[OrderDate]]">HtmlEncode[[OrderDate]]</label>
<input type="HtmlEncode[[datetime]]" id="HtmlEncode[[OrderDate]]" name="HtmlEncode[[OrderDate]]" value="HtmlEncode[[0001/01/01/ A.D.]]" />
<input type="HtmlEncode[[datetime]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The OrderDate field is required.]]" id="HtmlEncode[[OrderDate]]" name="HtmlEncode[[OrderDate]]" value="HtmlEncode[[0001/01/01/ A.D.]]" />
</div>
<div>
<label class="order" for="HtmlEncode[[NeedSpecialHandle]]">HtmlEncode[[NeedSpecialHandle]]</label>
<input checked="HtmlEncode[[checked]]" id="HtmlEncode[[NeedSpecialHandle]]" name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[checkbox]]" value="HtmlEncode[[true]]" /><input name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[false]]" />
<input checked="HtmlEncode[[checked]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The NeedSpecialHandle field is required.]]" id="HtmlEncode[[NeedSpecialHandle]]" name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[checkbox]]" value="HtmlEncode[[true]]" /><input name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[false]]" />
</div>
<div>
<label class="order" for="HtmlEncode[[PaymentMethod]]">HtmlEncode[[PaymentMethod]]</label>
@ -49,7 +49,7 @@
</div>
<div>
<label class="order" for="HtmlEncode[[Customer_Number]]">HtmlEncode[[Number]]</label>
<input class="form-control" type="HtmlEncode[[number]]" data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" id="HtmlEncode[[Customer_Number]]" name="HtmlEncode[[Customer.Number]]" value="HtmlEncode[[1]]" />
<input class="form-control" type="HtmlEncode[[number]]" data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" data-val-required="HtmlEncode[[The Number field is required.]]" id="HtmlEncode[[Customer_Number]]" name="HtmlEncode[[Customer.Number]]" value="HtmlEncode[[1]]" />
<span class="HtmlEncode[[field-validation-valid]]" data-valmsg-for="HtmlEncode[[Customer.Number]]" data-valmsg-replace="HtmlEncode[[true]]"></span>
</div>
<div>
@ -72,7 +72,7 @@
</div>
<div>
<label class="order" for="HtmlEncode[[Customer_Gender]]">HtmlEncode[[Gender]]</label>
<input type="HtmlEncode[[radio]]" value="HtmlEncode[[Male]]" id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" /> Male
<input type="HtmlEncode[[radio]]" value="HtmlEncode[[Male]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The Model field is required.]]" id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" /> Male
<input type="HtmlEncode[[radio]]" value="HtmlEncode[[Female]]" checked="HtmlEncode[[checked]]" id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" /> Female
<span class="HtmlEncode[[field-validation-valid]]" data-valmsg-for="HtmlEncode[[Customer.Gender]]" data-valmsg-replace="HtmlEncode[[true]]"></span>
</div>

View File

@ -14,7 +14,7 @@
</div>
<div>
<label class="order" for="ShippingDateTime">ShippingDateTime</label>
<input type="datetime-local" id="ShippingDateTime" name="ShippingDateTime" value="01/01/0001 00:00:00" />
<input type="datetime-local" data-val="true" data-val-required="The ShippingDateTime field is required." id="ShippingDateTime" name="ShippingDateTime" value="01/01/0001 00:00:00" />
</div>
<div>
<label class="order" for="Products">Products</label>
@ -34,11 +34,11 @@
</div>
<div>
<label class="order" for="OrderDate">OrderDate</label>
<input type="datetime" id="OrderDate" name="OrderDate" value="0001/01/01/ A.D." />
<input type="datetime" data-val="true" data-val-required="The OrderDate field is required." id="OrderDate" name="OrderDate" value="0001/01/01/ A.D." />
</div>
<div>
<label class="order" for="NeedSpecialHandle">NeedSpecialHandle</label>
<input checked="checked" id="NeedSpecialHandle" name="NeedSpecialHandle" type="checkbox" value="true" /><input name="NeedSpecialHandle" type="hidden" value="false" />
<input checked="checked" data-val="true" data-val-required="The NeedSpecialHandle field is required." id="NeedSpecialHandle" name="NeedSpecialHandle" type="checkbox" value="true" /><input name="NeedSpecialHandle" type="hidden" value="false" />
</div>
<div>
<label class="order" for="PaymentMethod">PaymentMethod</label>
@ -49,7 +49,7 @@
</div>
<div>
<label class="order" for="Customer_Number">Number</label>
<input class="form-control" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Customer_Number" name="Customer.Number" value="1" />
<input class="form-control" type="number" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." id="Customer_Number" name="Customer.Number" value="1" />
<span class="field-validation-valid" data-valmsg-for="Customer.Number" data-valmsg-replace="true"></span>
</div>
<div>
@ -72,7 +72,7 @@
</div>
<div>
<label class="order" for="Customer_Gender">Gender</label>
<input type="radio" value="Male" id="Customer_Gender" name="Customer.Gender" /> Male
<input type="radio" value="Male" data-val="true" data-val-required="The Model field is required." id="Customer_Gender" name="Customer.Gender" /> Male
<input type="radio" value="Female" checked="checked" id="Customer_Gender" name="Customer.Gender" /> Female
<span class="field-validation-valid" data-valmsg-for="Customer.Gender" data-valmsg-replace="true"></span>
</div>

View File

@ -14,7 +14,7 @@
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[ShippingDateTime]]">HtmlEncode[[ShippingDateTime]]</label>
<input id="HtmlEncode[[ShippingDateTime]]" name="HtmlEncode[[ShippingDateTime]]" type="HtmlEncode[[datetime-local]]" value="HtmlEncode[[01/01/0001 00:00:00]]" />
<input data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The ShippingDateTime field is required.]]" id="HtmlEncode[[ShippingDateTime]]" name="HtmlEncode[[ShippingDateTime]]" type="HtmlEncode[[datetime-local]]" value="HtmlEncode[[01/01/0001 00:00:00]]" />
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[Products]]">HtmlEncode[[Products]]</label>
@ -34,11 +34,11 @@
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[OrderDate]]">HtmlEncode[[OrderDate]]</label>
<input id="HtmlEncode[[OrderDate]]" name="HtmlEncode[[OrderDate]]" type="HtmlEncode[[datetime]]" value="HtmlEncode[[0001/01/01/ A.D.]]" />
<input data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The OrderDate field is required.]]" id="HtmlEncode[[OrderDate]]" name="HtmlEncode[[OrderDate]]" type="HtmlEncode[[datetime]]" value="HtmlEncode[[0001/01/01/ A.D.]]" />
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[NeedSpecialHandle]]">HtmlEncode[[NeedSpecialHandle]]</label>
<input checked="HtmlEncode[[checked]]" id="HtmlEncode[[NeedSpecialHandle]]" name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[checkbox]]" value="HtmlEncode[[true]]" /><input name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[false]]" />
<input checked="HtmlEncode[[checked]]" data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The NeedSpecialHandle field is required.]]" id="HtmlEncode[[NeedSpecialHandle]]" name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[checkbox]]" value="HtmlEncode[[true]]" /><input name="HtmlEncode[[NeedSpecialHandle]]" type="HtmlEncode[[hidden]]" value="HtmlEncode[[false]]" />
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[PaymentMethod]]">HtmlEncode[[PaymentMethod]]</label>
@ -48,7 +48,7 @@
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[Customer_Number]]">HtmlEncode[[Number]]</label>
<input class="HtmlEncode[[form-control]]" data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" id="HtmlEncode[[Customer_Number]]" name="HtmlEncode[[Customer.Number]]" type="HtmlEncode[[number]]" value="HtmlEncode[[1]]" />
<input class="HtmlEncode[[form-control]]" data-val="HtmlEncode[[true]]" data-val-range="HtmlEncode[[The field Number must be between 1 and 100.]]" data-val-range-max="HtmlEncode[[100]]" data-val-range-min="HtmlEncode[[1]]" data-val-required="HtmlEncode[[The Number field is required.]]" id="HtmlEncode[[Customer_Number]]" name="HtmlEncode[[Customer.Number]]" type="HtmlEncode[[number]]" value="HtmlEncode[[1]]" />
<span class="HtmlEncode[[field-validation-valid]]" data-valmsg-for="HtmlEncode[[Customer.Number]]" data-valmsg-replace="HtmlEncode[[true]]"></span>
</div>
<div>
@ -71,7 +71,7 @@
</div>
<div>
<label class="HtmlEncode[[order]]" for="HtmlEncode[[Customer_Gender]]">HtmlEncode[[Gender]]</label>
<input id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Male]]" /> Male
<input data-val="HtmlEncode[[true]]" data-val-required="HtmlEncode[[The Gender field is required.]]" id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Male]]" /> Male
<input checked="HtmlEncode[[checked]]" id="HtmlEncode[[Customer_Gender]]" name="HtmlEncode[[Customer.Gender]]" type="HtmlEncode[[radio]]" value="HtmlEncode[[Female]]" /> Female
<span class="HtmlEncode[[field-validation-valid]]" data-valmsg-for="HtmlEncode[[Customer.Gender]]" data-valmsg-replace="HtmlEncode[[true]]"></span>
</div>

View File

@ -14,7 +14,7 @@
</div>
<div>
<label class="order" for="ShippingDateTime">ShippingDateTime</label>
<input id="ShippingDateTime" name="ShippingDateTime" type="datetime-local" value="01/01/0001 00:00:00" />
<input data-val="true" data-val-required="The ShippingDateTime field is required." id="ShippingDateTime" name="ShippingDateTime" type="datetime-local" value="01/01/0001 00:00:00" />
</div>
<div>
<label class="order" for="Products">Products</label>
@ -34,11 +34,11 @@
</div>
<div>
<label class="order" for="OrderDate">OrderDate</label>
<input id="OrderDate" name="OrderDate" type="datetime" value="0001/01/01/ A.D." />
<input data-val="true" data-val-required="The OrderDate field is required." id="OrderDate" name="OrderDate" type="datetime" value="0001/01/01/ A.D." />
</div>
<div>
<label class="order" for="NeedSpecialHandle">NeedSpecialHandle</label>
<input checked="checked" id="NeedSpecialHandle" name="NeedSpecialHandle" type="checkbox" value="true" /><input name="NeedSpecialHandle" type="hidden" value="false" />
<input checked="checked" data-val="true" data-val-required="The NeedSpecialHandle field is required." id="NeedSpecialHandle" name="NeedSpecialHandle" type="checkbox" value="true" /><input name="NeedSpecialHandle" type="hidden" value="false" />
</div>
<div>
<label class="order" for="PaymentMethod">PaymentMethod</label>
@ -48,7 +48,7 @@
</div>
<div>
<label class="order" for="Customer_Number">Number</label>
<input class="form-control" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" id="Customer_Number" name="Customer.Number" type="number" value="1" />
<input class="form-control" data-val="true" data-val-range="The field Number must be between 1 and 100." data-val-range-max="100" data-val-range-min="1" data-val-required="The Number field is required." id="Customer_Number" name="Customer.Number" type="number" value="1" />
<span class="field-validation-valid" data-valmsg-for="Customer.Number" data-valmsg-replace="true"></span>
</div>
<div>
@ -71,7 +71,7 @@
</div>
<div>
<label class="order" for="Customer_Gender">Gender</label>
<input id="Customer_Gender" name="Customer.Gender" type="radio" value="Male" /> Male
<input data-val="true" data-val-required="The Gender field is required." id="Customer_Gender" name="Customer.Gender" type="radio" value="Male" /> Male
<input checked="checked" id="Customer_Gender" name="Customer.Gender" type="radio" value="Female" /> Female
<span class="field-validation-valid" data-valmsg-for="Customer.Gender" data-valmsg-replace="true"></span>
</div>

View File

@ -11,7 +11,7 @@
<div>
<label class="product" for="z0__Number">Number</label>
<input type="number" id="z0__Number" name="[0].Number" value="0" />
<input type="number" data-val="true" data-val-required="The Number field is required." id="z0__Number" name="[0].Number" value="0" />
</div>
<div>
<label class="product" for="z0__ProductName">ProductName</label>
@ -28,7 +28,7 @@
<div>
<label class="product" for="z1__Number">Number</label>
<input type="number" id="z1__Number" name="[1].Number" value="1" />
<input type="number" data-val="true" data-val-required="The Number field is required." id="z1__Number" name="[1].Number" value="1" />
</div>
<div>
<label class="product" for="z1__ProductName">ProductName</label>
@ -45,7 +45,7 @@
<div>
<label class="product" for="z2__Number">Number</label>
<input type="number" id="z2__Number" name="[2].Number" value="2" />
<input type="number" data-val="true" data-val-required="The Number field is required." id="z2__Number" name="[2].Number" value="2" />
</div>
<div>
<label class="product" for="z2__ProductName">ProductName</label>

View File

@ -25,7 +25,7 @@
<div class="form-group">
<label class="control-label col-md-2" for="Age">Age</label>
<div class="col-md-10">
<input class="form-control input-validation-error" type="number" data-val="true" data-val-range="The field Age must be between 10 and 100." data-val-range-max="100" data-val-range-min="10" id="Age" name="Age" value="1000" />
<input class="form-control input-validation-error" type="number" data-val="true" data-val-range="The field Age must be between 10 and 100." data-val-range-max="100" data-val-range-min="10" data-val-required="The Age field is required." id="Age" name="Age" value="1000" />
<span class="field-validation-error" data-valmsg-for="Age" data-valmsg-replace="true">The field Age must be between 10 and 100.</span>
</div>
</div>
@ -36,7 +36,7 @@
<span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
</div>
<input type="hidden" value="0" id="EmployeeId" name="EmployeeId" />
<input type="hidden" value="0" data-val="true" data-val-required="The EmployeeId field is required." id="EmployeeId" name="EmployeeId" />
<div class="form-group">
<label class="control-label col-md-2" for="FullName">Full Name</label>
<div class="col-md-10">

View File

@ -23,7 +23,7 @@
<div class="form-group">
<label class="control-label col-md-2" for="Age">Age</label>
<div class="col-md-10">
<input class="form-control" type="number" data-val="true" data-val-range="The field Age must be between 10 and 100." data-val-range-max="100" data-val-range-min="10" id="Age" name="Age" value="" />
<input class="form-control" type="number" data-val="true" data-val-range="The field Age must be between 10 and 100." data-val-range-max="100" data-val-range-min="10" data-val-required="The Age field is required." id="Age" name="Age" value="" />
<span class="field-validation-valid" data-valmsg-for="Age" data-valmsg-replace="true"></span>
</div>
</div>
@ -34,7 +34,7 @@
<span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
</div>
<input type="hidden" value="0" id="EmployeeId" name="EmployeeId" />
<input type="hidden" value="0" data-val="true" data-val-required="The EmployeeId field is required." id="EmployeeId" name="EmployeeId" />
<div class="form-group">
<label class="control-label col-md-2" for="FullName">Full Name</label>
<div class="col-md-10">

View File

@ -1,7 +1,7 @@
<div>
<span class="bold">TestCarDealer</span>
<em>SE</em>
<input id="Dealer_Id" name="Dealer.Id" type="hidden" value="32" />
<input data-val="true" data-val-required="The Id field is required." id="Dealer_Id" name="Dealer.Id" type="hidden" value="32" />
</div>
<div class="validation-summary-errors"><ul><li style="display:none"></li>
</ul></div>
@ -10,7 +10,7 @@
<span class="field-validation-error" data-valmsg-for="Vehicle.Vin" data-valmsg-replace="true">The field Vin must be a string with a maximum length of 8.</span>
</fieldset>
<fieldset>
<input class="input-validation-error text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" id="Vehicle_Year" name="Vehicle.Year" type="number" value="9001" />
<input class="input-validation-error text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" data-val-required="The Year field is required." id="Vehicle_Year" name="Vehicle.Year" type="number" value="9001" />
<span class="field-validation-error" data-valmsg-for="Vehicle.Year" data-valmsg-replace="true">The field Year must be between 1980 and 2034.</span>
</fieldset>
</form>

View File

@ -1,7 +1,7 @@
<div>
<span class="bold">TestCarDealer</span>
<em>SE</em>
<input id="Dealer_Id" name="Dealer.Id" type="hidden" value="43" />
<input data-val="true" data-val-required="The Id field is required." id="Dealer_Id" name="Dealer.Id" type="hidden" value="43" />
</div>
<div class="validation-summary-errors"><ul><li>Make is invalid for region.</li>
</ul></div>
@ -10,7 +10,7 @@
<span class="field-validation-valid" data-valmsg-for="Vehicle.Vin" data-valmsg-replace="true"></span>
</fieldset>
<fieldset>
<input class="text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" id="Vehicle_Year" name="Vehicle.Year" type="number" value="2013" />
<input class="text-box single-line" data-val="true" data-val-range="The field Year must be between 1980 and 2034." data-val-range-max="2034" data-val-range-min="1980" data-val-required="The Year field is required." id="Vehicle_Year" name="Vehicle.Year" type="number" value="2013" />
<span class="field-validation-valid" data-valmsg-for="Vehicle.Year" data-valmsg-replace="true"></span>
</fieldset>
</form>

View File

@ -33,7 +33,7 @@
<div class="form-group">
<label class="control-label col-md-2" for="Id">Id</label>
<div class="col-md-10">
<input class="form-control text-box single-line" id="Id" name="Id" type="number" value="" />
<input class="form-control text-box single-line" data-val="true" data-val-required="The Id field is required." id="Id" name="Id" type="number" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Id" data-valmsg-replace="true"></span>
</div>
</div>

View File

@ -33,7 +33,7 @@
<div class="form-group">
<label class="control-label col-md-2" for="Id">Id</label>
<div class="col-md-10">
<input class="form-control text-box single-line" id="Id" name="Id" type="number" value="" />
<input class="form-control text-box single-line" data-val="true" data-val-required="The Id field is required." id="Id" name="Id" type="number" value="" />
<span class="field-validation-valid text-danger" data-valmsg-for="Id" data-valmsg-replace="true"></span>
</div>
</div>