我有一个简单的地址输入应用程序,我正在尝试使用IDataErrorInfo接口作为
explained on the asp.net site.
它适用于可以独立验证的项目,但是当某些项目依赖于其他项目时效果不佳.例如,验证邮政编码取决于国家/地区:
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中.
解决方法
对于更复杂的业务规则验证,而不是类型验证,可能更好地实现设计模式,例如服务层.您可以检查ModelState并根据您的逻辑添加错误.
您可以在此处查看Rob Conroys模式示例
http://www.asp.net/learn/mvc/tutorial-29-cs.aspx
关于数据注释的这篇文章也很有用.
http://www.asp.net/learn/mvc/tutorial-39-cs.aspx
希望这可以帮助.