[英]Asp.Net MVC Data Annotations. How to get client side validation on 2 properties being equal
如何在两个属性(例如经典密码确认密码方案)上获得客户端验证。
我正在使用基于EF映射到数据库表的元数据类,以下是代码。
我的课程中注释掉的属性将使我可以进行服务器端验证,而不能进行客户端验证。
[MetadataType(typeof(MemberMD))]
public partial class Member
{
//[CustomValidation(typeof(MemberMD), "Verify", ErrorMessage = "The password and confirmation password did not match.")]
//[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "The password and confirmation password did not match.")]
public class MemberMD
{
[Required(ErrorMessage = "Name is required.")]
[StringLength(50, ErrorMessage = "No more than 50 characters")]
public object Name { get; set; }
[Required(ErrorMessage = "Email is required.")]
[StringLength(50, ErrorMessage = "No more than 50 characters.")]
[RegularExpression(".+\\@.+\\..+", ErrorMessage = "Valid email required e.g. abc@xyz.com")]
public object Email { get; set; }
[Required(ErrorMessage = "Password is required.")]
[StringLength(30, ErrorMessage = "No more than 30 characters.")]
[RegularExpression("[\\S]{6,}", ErrorMessage = "Must be at least 6 characters.")]
public object Password { get; set; }
[Required]
public object ConfirmPassword { get; set; }
[Range(0, 150), Required]
public object Age { get; set; }
[Required(ErrorMessage = "Postcode is required.")]
[RegularExpression(@"^[a-zA-Z0-9 ]{1,10}$", ErrorMessage = "Postcode must be alphanumeric and no more than 10 characters in length")]
public object Postcode { get; set; }
[DisplayName("Security Question")]
[Required]
public object SecurityQuestion { get; set; }
[DisplayName("Security Answer")]
[Required]
[StringLength(50, ErrorMessage = "No more than 50 characters.")]
public object SecurityAnswer { get; set; }
public static ValidationResult Verify(MemberMD t)
{
if (t.Password == t.ConfirmPassword)
return ValidationResult.Success;
else
return new ValidationResult("");
}
}
任何帮助将不胜感激,因为我只做了这5个月,所以请不要惊blow。
您只需将其放在ConfirmPassword
属性上。
[Compare("Password", ErrorMessage = "Passwords don't match.")]
[Required]
public object ConfirmPassword { get; set; }
这意味着它将比较您的ConfirmPassword
属性和您的Password
属性。
1)ConfirmPassword对象的设置应类似于密码。 2)ConfirmPassword对象应具有另一个属性OriginalPasswordInputControl,它是“ Password”,并且3)在您的实用工具类中或您的处理验证将检查的任何地方:
//Probably in a function - something like Protected bool ValidateControl()
if (elementToValidate.Password != OriginalPasswordInputControl.Password)
{
return false;
}
else
{
return true;
}
您可以使用CompareTo属性。 正如对该问题的回答所指出的那样,它们并不是十分灵活,但是可以满足您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.