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)
你可以从用户ID ObjectInstance的ValidationContext.在您的情况下,它将是您的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)
如果您想要更通用的东西,可以添加指定属性名称的属性并使用反射来获取值.