2
讓我們有一個模型ASP.NET MVC - int類型的模型驗證和DateTime
public class Model
{
public int Number { get; set; }
public DateTime Date { get; set; }
}
我觀察到以下行爲。當沒有提交任何內容時,Number屬性的值爲0,Date的值爲1.1 0001 00:00:00,ModelState.IsValid的值爲true。
的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() });
}
這pieco如果我沒有理解這一權利,則數字屬性和日期時間屬性應該得到設置RequiredAttribute標籤和驗證程序應該設置模式無效,併產生相應的 錯誤消息。
所以我的問題是爲什麼模型無效?
我使用ASP.NET MVC 3
的模式應該是無效becauce沒有價值從形式發送。這些值不是來自輸入。所以所需的規則被打破了。對於所需的值使用可爲空的類型在我看來是錯誤的。首先,一個不可爲空的int應該像沒有任何必需的屬性那樣運行。並且可爲空的int應該表現得像一個非必需值 – user49126
@ user49126,您不能在非空類型(如int或DateTime)中存儲* no值*。無論您嘗試多麼努力,CLR都不會允許您。它的工作方式是默認模型聯編程序實例化模型(當然,它的所有屬性都被分配給它們的默認值,在你的情況下,值類型將是它們各自的默認值),然後調用驗證。由於這兩個屬性在它們內部具有完全有效的值,所以不存在驗證錯誤並且它非常有意義。 –
我知道,但至少模型應該是無效的。 – user49126