2013-08-06 60 views
1

在我的視圖模型中,我有一個名爲BirthDate的可爲空的DateTime屬性。Asp.net MVC可爲空DateTime模型狀態驗證

當我向控制器提交一個無效的DateTime值時,ModelState.IsValid爲false,表示BirthDate是一個無效的DateTime。

我該如何讓ModelState將無效的可空DateTime作爲空值對待,而不是使其失效?

+0

這是否有道理:嘗試後空字符串時,也會出現這種情況?如果用戶輸入日期,他會期望它被接受(或拒絕)。如果你簡單地將它們保存爲'null',它可能會變成問題。 – Gorgsenegger

+0

我需要這個,因爲在客戶端驗證日期時間是非常有問題的,尤其是如果您使用[google chrome](http://stackoverflow.com/questions/6906725/unobtrusive-validation-in-chrome-wont-validate-with -dd毫米-YYYY) – Catalin

回答

0

你正在做客戶端驗證,那麼你不擔心驗證,如果出生日期值爲null或空,那麼你返回null。

public class DateFieldAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value == null || value == string.empty) 
     { 
      return null; 
     } 
     else 
     { 
    //Validate the Birth date. 
     } 
    } 
} 

如果您返回NULL,那麼ModelState不會考慮生日日期字段。

0

ModelState對於DateTime有點麻煩,因爲每次發佈的輸入都不匹配日期時間格式.isValid()將會是false。

您是否考慮過使用字符串來接收用戶輸入,並稍後查看是否有可能解析爲DateTime。

Ps。 C# MVC 4 ViewModel not accepting null DateTime

希望這有助於:)