[英]What does it mean for a property to be [Required] and nullable?
屬性是[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中的文章輸入驗證與模型驗證以及標題為“欠發布”問題的部分 。
它可以為空,因此表單不會顯示像0001-01-01T00:00:00
這樣沒有意義的初始值。
需要強制用戶輸入內容。
必需是視圖的數據注釋。 該視圖將要求它在接受表單帖子之前具有值。
值可以為空可與數據庫中允許的內容相關。 數據庫中的值可以為null,或者值可以保持為null。
它們是不同的方面。
它是客戶端驗證所required
,但對於數據庫映射是nullable
的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.