【问题标题】:How to make custom date validation attribute?如何制作自定义日期验证属性?
【发布时间】:2017-03-30 14:37:05
【问题描述】:

我需要帮助在 EditorFor 中格式化这样的日期,例如。 3/2017 等等。我尝试编写代码,但发现出了点问题。

示例:

public class ValidDate : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dateTime;

        var isValid = DateTime.TryParseExact(Convert.ToString(value),
            "MM/yyyy",
            CultureInfo.CurrentCulture,
            DateTimeStyles.None,
            out dateTime);

        return isValid;
    }
}

[ValidDate]
public DateTime Date { get; set; }

有效结果示例:

1/2017
2/2017
3/2017
4/2017
5/2017
6/2017
7/2017
8/2017
9/2017
10/2017
11/2017
12/2017

【问题讨论】:

  • 您的属性是 DateTime,它至少需要日、月和年的值 - 这些值都不可能有效。
  • 尝试使用那里给出的正则表达式:stackoverflow.com/questions/3944446/…。但是,您必须将Date 属性声明为字符串,并将验证模式与正则表达式进行比较。

标签: c# asp.net asp.net-mvc


【解决方案1】:

我检查了您的属性,发现您以 M/yyyy 格式传递日期。 这就是为什么你需要改变属性如下:

public class ValidDate : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dateTime;

        var isValid = DateTime.TryParseExact(Convert.ToString(value),
            "M/yyyy",
            CultureInfo.CurrentCulture,
            DateTimeStyles.None,
            out dateTime);

        return isValid;
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多