使用Data Annotation验证DateTime(日期和小时)

Mar*_*arc 19 asp.net-mvc datetime data-annotations

我有以下代码:

        [DisplayName("58.Date and hour of birth")]
        [DataType(DataType.DateTime, ErrorMessage = "Please enter a valid date in the format dd/mm/yyyy hh:mm")]
        [Range(typeof(DateTime), "1/1/2011", "1/1/2016")]
        [RequiredToClose]
        public object V_58 { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想强制包含时间(格式为hh:mm)而不仅仅是日期.此代码将1/1/2011视为有效,因为它不包含小时,有关如何表达正确格式的任何线索?(dd/mm/yyyy hh:mm)

Dav*_*Fox 28

你可以自己编写ValidationAttribute并用它装饰属性.您可以IsValid使用自己的逻辑覆盖该方法.

public class MyAwesomeDateValidation : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dt;
        bool parsed = DateTime.TryParse((string)value, out dt);
        if(!parsed)
            return false;

        // eliminate other invalid values, etc
        // if contains valid hour for your business logic, etc

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,装饰你的财产:

[MyAwesomeDateValidation(ErrorMessage="You were born in another dimension")]
public object V_58 { get; set; }
Run Code Online (Sandbox Code Playgroud)

注意:要警惕属性上的多个验证属性,因为无法在没有更多自定义的情况下确定它们的评估顺序,并且随后验证逻辑重叠,您的错误消息可能无法准确描述错误到底意味着什么与财产(是的,这是一个连续的句子)

  • 请记住,直接从ValidationAttribute继承意味着内置的客户端验证将无法运行,因此最好从RegularExpressionAttribute继承(如@ user329957),以便内置的regex内容在客户端自动运行. (2认同)