相关: 使用ASP.NET MVC实现字段验证的最佳方法是什么?
让我们假设一个具有以下项目的解决方案:
Foo; // the MVC web project
Foo.Models;
Foo.Repositories;
Foo.Services;
Foo.Models是所有实体的应用程序域,无论使用EF,NH,POCO还是其他什么都无关紧要.这是一个例子:
public class User
{
    public string Username { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}
在Foo.Repositories那里有一个,UserRepository并且Foo.Services有一个UserService.
在Web应用程序中,让我们考虑如下的模型绑定器:
public class UserBinder : DefaultModelBinder
{
    //...
}
我在验证的位置上看到了三种不同的选项:
在Foo.Models像下面这样:
public class User
{
    public string Username { get; set; }
    public string Email { get; set; …我有一个简单的地址输入应用程序,我正在尝试使用IDataErrorInfo接口,如asp.net网站上所述.
它适用于可以独立验证的项目,但是当某些项目依赖于其他项目时效果不佳.例如,验证邮政编码取决于国家/地区:
    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中.