2 Stimmen

Asp.Net MVC-Daten-Anmerkungen. Wie man Client-Seite Validierung auf 2 Eigenschaften gleich zu bekommen

Wie erhalten Sie Client-seitige Validierung auf zwei Eigenschaften wie das klassische Passwort bestätigen Passwort Szenario.

Ich verwende eine Metadatenklasse basierend auf EF-Zuordnung zu meiner DB-Tabelle, hier ist der Code.

Die auskommentierten Attribute meiner Klasse ermöglichen mir eine serverseitige Validierung, aber keine clientseitige.

[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("");
        }
    }

Für jede Hilfe wäre ich dankbar, denn ich mache das erst seit 5 Monaten, also versuchen Sie bitte, mich nicht verrückt zu machen.

1voto

Seichi Punkte 271

Sie müssen dies nur auf Ihre ConfirmPassword Attribut.

    [Compare("Password", ErrorMessage = "Passwords don't match.")]
    [Required]
    public object ConfirmPassword { get; set; }

Das bedeutet, dass es Ihre ConfirmPassword Attribut mit Ihrem Password Attribut.

0voto

VoodooChild Punkte 9666

1) Das ConfirmPassword-Objekt sollte ähnlich wie das Password eingerichtet werden. 2) das ConfirmPassword-Objekt sollte eine weitere Eigenschaft OriginalPasswordInputControl haben, die das "Password" ist und 3) in Ihrer Utility-Klasse oder wo auch immer die Validierung der Verarbeitung geprüft wird:

//Probably in a function - something like Protected bool ValidateControl()           
if (elementToValidate.Password != OriginalPasswordInputControl.Password)
            {
                return false;
            }
            else
            {
                return true;
            }

0voto

Roman Punkte 18281

Sie könnten die VergleichenZu Attribut. Wie die Antworten auf diese Frage gezeigt haben, sind sie nicht sehr flexibel, würden aber Ihren Bedürfnissen entsprechen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X