属性是和可空的是什么意思?
属性是[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
的