我有一个简单的地址输入应用程序,我正在尝试使用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
希望这可以帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。