我正在使用Entity Framework Code First方法,这意味着我的模型需要数据注释属性来创建数据库。我希望验证在我的模型上进行。
我的网站上有一些视图可以发布一些信息。但是这个信息并不是整个模型,如果我要验证它,验证会失败。
例如,我可能有一个具有这些“required”属性的模型:
有没有办法在模型和ViewModel上拥有相同的验证而不重复代码?
这是一个根本行不通的尝试...
我想创建一个自定义属性,将验证链接到模型:
我的网站上有一些视图可以发布一些信息。但是这个信息并不是整个模型,如果我要验证它,验证会失败。
例如,我可能有一个具有这些“required”属性的模型:
Title
,Text
,X
...但是我可能有一个视图只会发布Text
的值。为此,我创建了一个ViewModel(其中还有其他未附加到模型的元素)。但是,在这种情况下,如何验证Text
?我需要它与模型属性Text
具有相同的验证。有没有办法在模型和ViewModel上拥有相同的验证而不重复代码?
这是一个根本行不通的尝试...
我想创建一个自定义属性,将验证链接到模型:
/* This wouldn't work */
public class PropertyValidationAttribute : ValidationAttribute
{
public Type Type { get; set; }
public string PropertyName { get; set; }
public PropertyValidationAttribute(Type type, string propertyName)
{
Type = type;
PropertyName = propertyName;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var attrs = Type.GetProperty(PropertyName).GetCustomAttributes(typeof(ValidationAttribute), true) as IEnumerable<ValidationAttribute>;
if (attrs != null)
{
foreach (var attr in attrs)
{
return attr.GetValidationResult(value, validationContext);
}
}
return base.IsValid(value, validationContext);
}
}
以上所述的问题在于每个ValidationAttribute
一次只能验证一件事情,因此如果我在我的模型上有多个验证属性,它将无法正常工作。而且我不确定它是否适用于客户端,我甚至没有测试过...