【问题标题】:How to handle non-required, non-nullable Datetime value upon Model validation如何在模型验证时处理非必需的、不可为空的日期时间值
【发布时间】:2015-12-30 07:58:25
【问题描述】:

在我的模型中,我有一个不可为空的 DateTime 字段。我还没有将其设为必填字段。当我将视图中的相应输入留空并检查模型状态时,我看到该字段的验证失败。它说“值不能为空”。现在,我知道简单值不能为空,因此必须为它们分配一些值。我也明白使这个字段可以为空将解决这个问题。但是,当某个字段的尝试值为空时(就像默认模型绑定一样),我如何才能捕捉到这种情况,以显示我的自定义错误消息而不是通用错误消息?

【问题讨论】:

    标签: asp.net-mvc model-binding modelstate


    【解决方案1】:
    public class Person
    {
        [DataType(DataType.DateTime)]
        [Required(ErrorMessage = 'show my custom error message instead of the generic one')]
        public DateTime StartDate{get;set;}
    }
    

    将错误消息明确指定为字符串。或者,您可以在资源文件中定义它们,并根据传入用户的语言/文化选择性地对它们进行本地化。

    【讨论】:

    • 这是一个可能的解决方案,但我对手动捕获这种情况更感兴趣。
    • 您是否在寻找自定义验证属性:stackoverflow.com/questions/16100300/…
    • 在你的控制器方法中你可以做类似 ModelState.AddModelError("StartDate", "Custom error message");在执行您的自定义逻辑以捕获特定案例之后。
    • @HastaPasta,如果您在调试模式下查看 ModelState 对象并向下导航到不可为空的简单字段,您会发现有一个名为 AttemptedValue 的值,其值为 "" 。这就是我想要捕捉的。
    • 看来我必须实现自己的模型绑定器才能实现我想要实现的目标。不要误会我的意思,您建议的解决方案效果很好,但我想自己解决这个问题。
    猜你喜欢
    • 2022-12-09
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多