相关疑难解决方法(0)

在具有存储库,服务层和使用模型绑定器的ASP.Net MVC场景中应该进行验证?

相关: 使用ASP.NET MVC实现字段验证的最佳方法是什么?

让我们假设一个具有以下项目的解决方案:

Foo; // the MVC web project
Foo.Models;
Foo.Repositories;
Foo.Services;
Run Code Online (Sandbox Code Playgroud)

Foo.Models是所有实体的应用程序域,无论使用EF,NH,POCO还是其他什么都无关紧要.这是一个例子:

public class User
{
    public string Username { get; set; }

    public string Email { get; set; }

    public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Foo.Repositories那里有一个,UserRepository并且Foo.Services有一个UserService.

在Web应用程序中,让我们考虑如下的模型绑定器:

public class UserBinder : DefaultModelBinder
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我在验证的位置上看到了三种不同的选项:

validation asp.net-mvc

5
推荐指数
1
解决办法
2060
查看次数

在asp.net mvc中使用IDataErrorInfo

我有一个简单的地址输入应用程序,我正在尝试使用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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

因此,您只能在设置国家/地区后验证邮政编码,但似乎无法控制该订单.

我可以使用IDataErrorInfo中的错误字符串,但这不会显示在字段旁边的Html.ValidationMessage中.

validation asp.net-mvc idataerrorinfo

4
推荐指数
1
解决办法
2317
查看次数

标签 统计

asp.net-mvc ×2

validation ×2

idataerrorinfo ×1