我最近开始使用 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 接口,从而验证对象的所有属性。
有谁知道另一种方法吗?