在我的视图模型中,我有一个名为 BirthDate 的可为空的 DateTime 属性。
当我向控制器提交无效的 DateTime 值时,ModelState.IsValid 为 false,表示 BirthDate 是无效的 DateTime。
如何使 ModelState 将无效的可空 DateTime 视为空值,而不是使其无效?
在我的视图模型中,我有一个名为 BirthDate 的可为空的 DateTime 属性。
当我向控制器提交无效的 DateTime 值时,ModelState.IsValid 为 false,表示 BirthDate 是无效的 DateTime。
如何使 ModelState 将无效的可空 DateTime 视为空值,而不是使其无效?
您正在执行客户端验证,那么如果出生日期值为 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 不会考虑 Birthdate 字段。
ModelState 对 DateTime 有点麻烦,因为每次您发布的输入与 Datetime 格式不匹配时,.isValid() 都会为假。
您是否考虑过使用字符串来接收用户输入,然后看看它是否可以解析为 DateTime。
附言。尝试发布和清空字符串时也会发生这种情况:C# MVC 4 ViewModel not accepting null DateTime
希望这可以帮助 :)