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