asp mvc自定义验证如何获取其他值

shi*_*sei 1 validation asp.net-mvc mvvm data-annotations

我正在使用自定义验证比较用户名.我正在检查它是否与旧值相同,或者如果它通过正则表达式,它是可以接受的,但如果不是,则抛出错误.如果可能,我如何从viewmodel获取UserID?

    [EmailValidation]
    public string Username{ get; set; }
    public int UserID { get; set; }



public class EmailValidationAttribute : ValidationAttribute
    {
         protected override ValidationResult IsValid(object value, ValidationContext validationContext)
         {

             User user= User.getUserByID(UserID); //How to get UserID?
             string username= value.ToString();
             if (user.Username== username || IsValid(username))
                {
                    return ValidationResult.Success;
                }
                else
                {
                    return new ValidationResult("Error");
                }

            }
Run Code Online (Sandbox Code Playgroud)

Sła*_*iek 5

你可以从用户ID ObjectInstanceValidationContext.在您的情况下,它将是您的User类的实例.

public class EmailValidationAttribute : ValidationAttribute
{
     protected override ValidationResult IsValid(object value, ValidationContext validationContext)
     {
         UserDto dto = (UserDto)validationContext.ObjectInstance;
         User user= User.getUserByID(dto.UserID);
         string username = value.ToString();
         if (user.Username == username || IsValid(username))
         {
            return ValidationResult.Success;
         }
         else
         {
            return new ValidationResult("Error");
         }

    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想要更通用的东西,可以添加指定属性名称的属性并使用反射来获取值.