属性是和可空的是什么意思?

属性是[Required]和可空的是什么意思? (例如下面)似乎如果它是[Required]它可能不是null (没有值),并且如果它能够为null则它可能不是[Required]

 [Required] public DateTime? OrderDate { get; set; } 

使属性可为空并使用[Required]属性标记的原因是为了防止欠发布攻击。 它还允许您在视图中显示初始空值,而不是属性的默认值。 这通常使用视图模型中的值类型属性来完成。

发布不足的攻击是指恶意用户修改请求以省略请求中属性的值。 如果属性是DateTime (不可为空),则DefaultModelBinder将初始化其默认值( 01/01/0001 ),并且不会生成ModelState错误。 因此,即使它不是您所期望的,也可以保存该值。

如果属性是DateTime? (可空)和[Required] ,然后如果恶意用户确实省略了请求中的属性,那么将生成ModelState错误,因为请求中有一个值,并且将返回视图,因此无效数据将不会得救

另请参阅Brad Wilson 在ASP.NET MVC中的文章输入validation与模型validation以及标题为“欠发布”问题的部分

它可以为空,因此表单不会显示像0001-01-01T00:00:00这样没有意义的初始值。

需要强制用户输入内容。

必需是视图的数据注释。 该视图将要求它在接受表单post之前具有值。

值可以为空可与数据库中允许的内容相关。 数据库中的值可以为null,或者值可以保持为null。

它们是不同的方面。

它是客户端validation所required ,但对于DB映射是nullable