ASP.NET MVC - int和DateTime类型的模型验证

use*_*126 2 validation asp.net-mvc

我们有一个模型

     public class Model 
     {
         public int Number { get; set; }
         public DateTime Date { get; set; } 
     }
Run Code Online (Sandbox Code Playgroud)

我观察到以下行为.如果没有提交任何值,则ModelState.IsValid的值为true,则Number属性的值为0,Date的值为1.1 0001 00:00:00.

DataAnnotationsModelValidatorProvider类和GetValidators方法具有此代码片段

        // Add an implied [Required] attribute for any non-nullable value type,
        // unless they've configured us not to do that. 
        if (AddImplicitRequiredAttributeForValueTypes &&
                metadata.IsRequired && 
                !attributes.Any(a => a is RequiredAttribute)) { 
            attributes = attributes.Concat(new[] { new RequiredAttribute() });
        } 
Run Code Online (Sandbox Code Playgroud)

如果我理解这一点,那么Number属性和DateTime属性应该设置一个RequiredAttribute,验证例程应该设置模型无效并生成相应的错误消息.

所以我的问题是为什么模型无效?

我正在使用ASP.NET MVC 3

Dar*_*rov 5

所以我的问题是为什么模型无效?

因为它0是一个完全有效的整数,并且1.1 0001 00:00:00是完全有效的DateTime.我不明白你为什么期望你的模型无效.

使用可以使用属性的可空和装饰来实现所需的效果:

public class Model 
{
     [Required]
     public int? Number { get; set; }

     [Required]
     public DateTime? Date { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)