ASP MVC 5自定义验证属性以比较两个属性

本文关键字:属性 两个 比较 MVC 自定义 验证 ASP | 更新日期: 2023-09-27 18:01:04

我有以下自定义验证属性来检查两个属性是否不相同,但它应用于整个模型:

[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; }

ASP MVC 5自定义验证属性以比较两个属性

验证Properties值的另一种可能方法是使用Remote属性

在您的Model类中

 [DisplayName("Request By")]
 public string UserId { get; set; }

 [DisplayName("Assign To")]
 [Remote("Validate","Home", HttpMethod="Post", AdditionalFields="UserId", ErrorMessage = "Should not be same")]
       public string ManagerId { get; set; }

在控制器中

[HttpPost]
public ActionResult Validate(string ManagerId , string UserId )
{
  // put some validation involving ManagerId and UserId here
  return Json(true);
}

工作演示在这里