【发布时间】:2016-12-12 21:45:18
【问题描述】:
我有以下自定义验证属性来检查两个属性是否不相同但它应用于整个模型:
[AttributeUsage(AttributeTargets.Class)]
public class ValidateUser : ValidationAttribute
{
public override bool IsValid(object value)
{
UserViewModel user = value as UserViewModel;
if(user.UserId == user.ManagerId)
{
ErrorMessage = "The user and manager cannot be the same";
return false;
}
return true;
}
}
[ValidateUser]
public class UserViewModel
{
[DisplayName("Request By")]
public string UserId { get; set; }
[DisplayName("Assign To")]
public string ManagerId { get; set; }
}
我如何创建一个验证属性,这样我就可以装饰需要验证的属性,而不是装饰整个视图模型,以便错误消息显示在正在验证的字段附近。如下所示:
[DisplayName("Request By")]
[ValidateUser]
public string UserId { get; set; }
[DisplayName("Assign To")]
[ValidateUser]
public string ManagerId { get; set; }
【问题讨论】:
-
你必须使用反射。就我个人而言,我不认为 DataAnnotationAttributes 应该扩展到单个属性的范围之外。您可以在模型/视图模型上对此类事情进行验证。但这只是我。
-
考虑使用foolproof
[NotEqualTo]验证属性应用于您的属性。否则,您可以创建自己的 - 请参阅 The Complete Guide To Validation In ASP.NET MVC 3 - Part 2 以获得良好的指导
标签: c# asp.net-mvc validation customvalidator validationattribute