我最近开始使用MVC并且一直在使用框架来查看其局限性,并且在验证的情况下我注意到的一件事情如下。
在MVC上实现验证的传统方法是实现[必需],[范围] 等等在模型级别,然后在控制器级别使用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。但是我们说我有一个网络服务 能够创建新产品,或任何其他我不是的实例 使用控制器创建一个新的Product对象并保存它,[Required]属性 在这种情况下没有用,并且无法检查对象是否有效。
然而,我确实挖了一下,想出了一种方法将所有验证都移到了 对象级别是使所有对象实现IValidatableObject接口 从而验证对象的所有属性。有没有人知道另一种方式吗?