0

我有一个问题……我有一个用户注册表单……在这个表单中,我有 3 个字段分别代表出生的日期、月份和年份。我喜欢有 3 个不同的字段(3 个菜单)。如何创建允许我检查有效日期的验证器?(不接受像 2011 年 2 月 30 日这样的日期)我可以在 JavaScript(客户端)中做到这一点,但即使我想像往常一样在 model-vew-controller 中使用验证器?

4

2 回答 2

2

您可以将验证器绑定到类而不是属性。我会做这样的事情:

//The Model
[DateValidator]
public class Date
{
    public string Month { get; set; }
    public string Day { get; set; }
    public string Year { get; set; }
}

//The DataAnnotation
[AttributeUsage(AttributeTargets.Class)]
class DateValidatorAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var date = value as Date;
        Debug.Assert(date != null);

        var dateString = date.Month + date.Day + date.Year;
        DateTime dateTime;
        var isValid = DateTime.TryParseExact(dateString, "ddMMyyyy", CultureInfo.InvariantCulture, DateTimeStyles.None,
                                             out dateTime);
        return isValid;
    }
}

编辑

DateTime.TryParseExact 会检查 DateTime 的有效性(即,如果您尝试解析 30/02/2011,它将返回 false)。

于 2011-09-28T13:13:35.530 回答
0

创建您的模型绑定器,它将从上下文中获取这 3 个字段并完全验证它们。

于 2011-09-28T13:02:02.580 回答