0

我最近开始使用 MVC 并一直在摆弄框架以查看它的局限性,在验证的情况下我注意到的一件事如下。

在 MVC 上实现验证的传统方法是在模型级别实现 [Required]、[Range] 等,然后在控制器级别使用 ModelState.IsValid 属性来确保要保存的对象是有效的。

但这似乎有一个限制,可以说我有以下对象

[Table(Name = "Products")]
public class Product
{

    private int _id;
    private string _freeProductId; 

    [Column(IsPrimaryKey = true, Storage = "_id", Name = "id", IsDbGenerated = true)]
    public int Id
    {
        get
        {
            return (_id);
        }
        set
        {
            _id = value;
        }
    }

[Required]
[Column(Storage = "_freeProductId", Name = "free_product_id")]
public string FreeProductId
{
    get
    {
        return (_freeProductId);
    }
    set
    {
        _freeProductId = value;
    }
}

}

我可以在控制器级别使用 ModelState.IsValid 验证 Product 对象,以检查是否输入了 FreeProductId。但是假设我有一个能够创建新产品的 Web 服务,或者我没有使用控制器创建新产品对象并保存它的任何其他实例,[Required] 属性在这样的case 并且没有办法检查对象是否有效。

但是,我确实进行了一些研究,并想出了将所有验证移至对象级别的一种方法是使所有对象都实现 IValidatableObject 接口,从而验证对象的所有属性。

有谁知道另一种方法吗?

4

0 回答 0