【问题标题】:Asp.net MVC nullable DateTime model state validationAsp.net MVC 可为空的 DateTime 模型状态验证
【发布时间】:2013-08-07 03:49:06
【问题描述】:

在我的视图模型中,我有一个名为 BirthDate 的可为空的 DateTime 属性。

当我向控制器提交无效的 DateTime 值时,ModelState.IsValid 为 false,表示 BirthDate 是无效的 DateTime。

如何让 ModelState 将无效的可空 DateTime 视为空值,而不是使其无效?

【问题讨论】:

  • 这有意义吗?如果用户输入一个日期,他会期望它被接受(或拒绝)。如果您只是将它们保存为null,则可能会出现问题。
  • 我需要这个,因为在客户端验证日期时间非常有问题,特别是如果您使用的是google chrome

标签: asp.net-mvc modelstate asp.net-mvc-validation


【解决方案1】:

ModelState 对 DateTime 有点麻烦,因为每次您发布的输入与 Datetime 格式不匹配时,.isValid() 都会为 false。

您是否考虑过使用字符串来接收用户输入,然后看看它是否可以解析为 DateTime。

附言。尝试发布和清空字符串时也会发生这种情况:C# MVC 4 ViewModel not accepting null DateTime

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    您正在执行客户端验证,那么您不必担心该验证是否出生日期值为 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 字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2010-12-07
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多