我有问题...... 我有一个用户注册表格..在这种形式我有3个字段代表出生日期,月份和年份。我喜欢有3个不同的字段(3个菜单)。如何创建一个允许我检查有效日期的验证器? (不接受像2011年2月30日这样的日期)我可以在JavaScript(客户端)中完成它,但即使我想在模型-vew-controller中像往常一样使用验证器?
答案 0 :(得分: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)。
答案 1 :(得分:0)
创建模型绑定器,它将从上下文中获取这3个字段并完全验证它们。