对于可以独立验证的项目,它非常有效,但是当某些项目依赖于其他项目时,效果不佳。例如,验证邮政编码取决于国家:
private string _PostalCode;
public string PostalCode
{
get
{
return _PostalCode;
}
set
{
switch (_Country)
{
case Countries.USA:
if (!Regex.IsMatch(value, @"^[0-9]{5}$"))
_errors.Add("PostalCode", "Invalid Zip Code");
break;
case Countries.Canada:
if (!Regex.IsMatch(value, @"^([a-z][0-9][a-z]) ?([0-9][a-z][0-9])$", RegexOptions.IgnoreCase))
_errors.Add("PostalCode", "Invalid postal Code");
break;
default:
throw new ArgumentException("Unknown Country");
}
_PostalCode = value;
}
}
所以只有在设置了国家之后才能验证邮政编码,但似乎没有办法控制这个顺序。
我可以使用IDataErrorInfo中的错误字符串,但这不会显示在Html.ValidationMessage旁边的字段。